Ruby中这个方法的更好实现是什么

时间:2014-05-13 01:29:18

标签: ruby

def search_and_sort (words, num)
 words.map{|a| a if  a.split("").sort.join == num.split("").sort.join}.compact
 end

def combine_anagrams(words)
  words.map{|a|  search_and_sort(words, a)}.uniq
end

p combine_anagrams(['cars', 'for', 'potatoes', 'racs', 'four', 'scar', 'creams', 'scream'] )

#==>[["cars", "racs", "scar"], ["for"], ["potatoes"], ["four"], ["creams", "scream"]]

1 个答案:

答案 0 :(得分:3)

你想要的是Enumerable的group_by方法:

def combine_anagrams(words)
  words.group_by do |word|
    word.chars.sort.join
  end.values
end

这种方法可以很容易地按任意标准对事物进行分组。