/ / Aký je rubínový ekvivalent mapy () pre reťazce? - rubínový, štiepaný

Aký je Ruby ekvivalent mapy () pre reťazce? - rubínový, štiepkovitý

Ak by ste chceli rozdeliť zoznam slov oddelených medzerou, použili by ste

def words(text)
return text.split.map{|word| word.downcase}
end

podobne ako porozumenie zoznamu Pythonu:

words("get out of here")

ktorý sa vracia ["get", "out", "of", "here"]. Ako môžem použiť blok na každý znak v reťazci?

odpovede:

21 pre odpoveď č. 1

použitie String#chars:

irb> "asdf".chars.map { |ch| ch.upcase }
=> ["A", "S", "D", "F"]

3 pre odpoveď č. 2

Hľadáte niečo takéto?

class String
def map
size.times.with_object("") {|i,s| s << yield(self[i])}
end
end

"ABC".map {|c| c.downcase}       #=> "abc"
"ABC".map(&:downcase)            #=> "abc"
"abcdef".map {|c| (c.ord+1).chr} #=> "bcdefg"
"abcdef".map {|c| c*3}           #=> "aaabbbcccdddeeefff"

2 pre odpoveď č. 3

Myslím si, že krátka odpoveď na vašu otázku je „nie, nič podobné“ map pre reťazce, ktoré obsluhujú znak súčasne. “Predchádzajúci odpovedač mal v mojej knihe najčistejšie riešenie; jednoducho ho vytvorte pridaním definície funkcie do triedy.

BTW, existuje tiež String#each_char čo je iterátor naprieč každým znakom reťazca. V tomto prípade String#chars získa rovnaký výsledok, pretože vráti pole, ktoré tiež reaguje each (alebo map), ale myslím, že sa môžu vyskytnúť prípady, keď by bolo potrebné rozlišovať.