我想从给定的字符串中分组ruby中的字谜,结果应该是一个包含字组组数组的数组
鉴于字符串:“四个疤痕膏的尖叫汽车”
这里的汽车和疤痕都是字谜(由相同的字符组成)
结果应该是[[cars,scar],['for'],['four'],['creams','scream']]
我试过这样但它总是返回一个空哈希,我想从中提取值。
s = "scream cars for four scar creams"
anagrams_hash = Hash.new([])
words = s.split
words.each {|word| anagrams_hash[word.chars.sort.join] << word}
但运行我的代码后anagrams_hash没有改变,仍然是{}
答案 0 :(得分:4)
如果你想按自己的方式去做,那么Stefan是对的。但我不明白代码中join
的目的。此外,您不必手动迭代哈希。还有一种更为鲁莽的方式。
"scream cars for four scar creams".split.group_by{|w| w.chars.sort}.values
#=> [["scream", "creams"], ["cars", "scar"], ["for"], ["four"]]
答案 1 :(得分:2)
您必须使用块语法声明哈希:
anagrams_hash = Hash.new { |hash, key| hash[key] = [] }
答案 2 :(得分:0)
问题是你没有将结果数组分配回anagrams_hash
,即从散列中取出数组,然后将单词追加到该数组,但绝不将结果数组写回哈希。当哈希中不存在键并且您获得默认元素时,这会导致问题。修复将是,例如,
words.each {|word| anagrams_hash[word.chars.sort.join] += [ word ] }