/ / Zmodyfikuj ciąg oparty na skrócie - ruby

Zmodyfikuj ciąg znaków na podstawie skrótu - ruby

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 № 1

Innym sposobem na to jest: -

str.gsub!(/w+/, hash)

String#gsub!

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"