我需要幫助找出爲什麼地圖和我的下面的代碼之間有差異。與地圖和每個輸出的差異
j = "This is an awesome string"
j.split('').map do |char|
char.next! if char =~ /[A-Za-z]/
end
這將返回:
["U", "i", "j", "t", nil, "j", "t", nil, "b", "o", nil, "b", "x", "f", "t", "p", "n", "f", nil, "t", "u", "s", "j", "o", "h"]
但
j.split('').each do |char|
char.next! if char =~ /[A-Za-z]/
回報:
["U", "i", "j", "t", " ", "j", "t", " ", "b", "o", " ", "b", "x", "f", "t", "p", "n", "f", " ", "t", "u", "s", "j", "o", "h"]
爲什麼從map
到each
的變化除去零?
像往常一樣,有一個oneliner這在紅寶石:' 「這是一個真棒字符串」 .gsub(/ [Az] /){| c | c.next}'與問題沒有嚴格的相關性,但值得了解(我認爲無論如何)。 – amnn
@asQuirreL在你的路上......''這是一個很棒的字符串「.enum_for(:gsub,/[a-z]/i).map(&:next)'......希望你會喜歡。它實際上是#map,它會在迭代期間告訴你它做了什麼。:-) –
類似的,有'這是一個很棒的字符串'.gsub(/ [Az] /,&::next)'(你的解決方案的問題是它實際上刪除了非字母字符,而不是忽略它們)。 – amnn