Chcę przekonwertować ciąg na podstawie skrótu. Na przykład ciąg "assistant director"
zostanie przekonwertowany na "asst dir"
gdy hash zawiera "assistant"=>"asst"
i "director"=>"dir"
. Chcę zrobić coś takiego:
hash = Hash["executive"=>"exec","assistant"=>"asst","associate"=>"assoc","director"=>"dir"]
str = "assistant director"
hash.each { |k, v| str.gsub!(k, v) }
# => "asst dir"
Oparte na ten post,
hash.each { |k, v| str.gsub!(k, v) }
powinna być odpowiedzią. Ale nie zwraca przekonwertowanego ciągu. I też nie str
przebrać się.
Odpowiedzi:
4 dla odpowiedzi № 1Innym sposobem na to jest: -
str.gsub!(/w+/, hash)
Jeśli drugim argumentem jest Hash, a dopasowany tekst jest jednym z jego kluczy, odpowiednią wartością jest ciąg zastępujący.
2 dla odpowiedzi nr 2
hash.each { |k, v| str.gsub!(k, v) }
wróci hash.to_a
, ale nie ma to znaczenia, ponieważ używasz gsub!
co oznacza, że twój str
jest zmieniony na miejscu. Po prostu zrób:
hash.each { |k, v| str.gsub!(k, v) }
str #=> "asst dir"