Ich möchte einen String konvertieren, der auf einem Hash basiert. Zum Beispiel die Zeichenfolge "assistant director"
wird in konvertiert "asst dir"
Wenn der Hash enthält "assistant"=>"asst"
und "director"=>"dir"
. Ich möchte etwas tun wie:
hash = Hash["executive"=>"exec","assistant"=>"asst","associate"=>"assoc","director"=>"dir"]
str = "assistant director"
hash.each { |k, v| str.gsub!(k, v) }
# => "asst dir"
Beyogen auf dieser Beitrag,
hash.each { |k, v| str.gsub!(k, v) }
sollte die Antwort sein. Die konvertierte Zeichenfolge wird jedoch nicht zurückgegeben str
sich umziehen.
Antworten:
4 für die Antwort № 1Eine andere Möglichkeit, dies zu tun, ist:
str.gsub!(/w+/, hash)
Wenn das zweite Argument ein Hash ist und der übereinstimmende Text einer seiner Schlüssel ist, ist der entsprechende Wert die Ersetzungszeichenfolge.
2 für die Antwort № 2
hash.each { |k, v| str.gsub!(k, v) }
wird zurückkehren hash.to_a
, aber es spielt keine Rolle, wie Sie es verwenden gsub!
was bedeutet, dass dein str
wird an Ort und Stelle geändert. Einfach machen:
hash.each { |k, v| str.gsub!(k, v) }
str #=> "asst dir"