如何将字符串中的字谜分组为数组

时间:2014-09-18 08:12:49

标签: ruby arrays ruby-on-rails-4 hashmap

我想从给定的字符串中分组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没有改变,仍然是{}

3 个答案:

答案 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 ] }