Ruby - 将数组排序为子类别

时间:2015-02-21 00:03:51

标签: ruby

让我们说我有一系列单词,例如:

words = ["apple", "zebra", "boat", "dog", "ape", "bingo"]

我想按字母顺序对它们进行排序,但是将它们分组如下:

sorted = [["ape", "apple"], ["bingo", "boat"], ["dog"], ["zebra"]]

我如何在Ruby中执行此操作?帮助赞赏。

4 个答案:

答案 0 :(得分:4)

我假设你试图按每个单词的第一个字母分组。在这种情况下,您可以使用sort对数组进行排序,并使用group_by按每个单词的第一个字符进行分组(由chr返回)。

words = ["apple", "zebra", "boat", "dog", "ape", "bingo"]
sorted = words.sort.group_by(&:chr).values

答案 1 :(得分:2)

你可以这样做:

words.sort.chunk { |s| s[0] }.map(&:last)

首先按字母顺序对数组进行排序(.sort),然后将具有相同第一个字符(.chunk { |s| s[0] })的元素“组合”在一起,然后从每个子数组{{抓取>最后一个元素1}}。

答案 2 :(得分:0)

这样的事情可以解决问题

words = ["apple", "zebra", "boat", "dog", "ape", "bingo"]
sorted = words.sort.group_by { |s| s[0] }.map { |k,v| v }

答案 3 :(得分:0)

您将需要一个也代表您的类别的数组。在这种情况下,字母表的字母。以下是使用嵌套循环查找的内容。

words = ["apple", "zebra", "boat", "dog", "ape", "bingo"]
results = []
('a'..'z').to_a.each_with_index do |letter, index|
    letter_result = []
    words.each do |word|
        if(word[0]==letter)
            letter_result.push(word)
        end
    end
    unless letter_result.empty?
        results.push(letter_result)
    end
end