1

我是新手,我不知道从这里去哪里。

def combine_anagrams(words)
    a1 = []
    words.sort do |x, y|
        a = x.downcase.chars.sort.join
        b = y.downcase.chars.sort.join
        if a == b
            a1.push(x,y)
        end
    end
end

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

我在数组中使用了 sort 方法,因为它是我发现的唯一可以让我将数组的两个元素传递给它以进行比较的方法。非常感谢任何和所有帮助!

4

3 回答 3

2
x.group_by{|s| s.downcase.chars.sort}.values
# => [["cars", "racs", "scar"], ["for"], ["potatoes"], ["four"], ["creams", "scream"]]
于 2013-03-31T17:33:05.567 回答
0

查看 上的文档combinationhttp://www.ruby-doc.org/core-2.0/Array.html#method-i-combination

尝试这样的事情(未经测试

def combine_anagrams(words)
    a1 = []
    words.combination(2).each do |x, y|
        a = x.downcase.chars.sort.join
        b = y.downcase.chars.sort.join
        if a == b
            a1.push(x,y)
        end
    end
end

x = ['cars', 'for', 'potatoes', 'racs', 'four', 'scar', 'creams', 'scream']
combine_anagrams(x)
于 2013-03-31T17:18:11.203 回答
0

如果您希望对所有可能的字谜进行分组,您可能不想一次只比较两个元素。您是否打算省略只有一个项目的字谜(例如,在您的示例中为“for”)?因此,您可能应该使用一次迭代每个元素的不同函数。

事后

我认为@sawa 的想法是正确的。它结合了您尝试实现的正确性和 Ruby 的简洁性。

于 2013-03-31T17:39:16.273 回答