Ruby:将数组数组转换为具有3个键值对的哈希

时间:2014-05-14 23:52:20

标签: ruby arrays hash enumerable

好的,重新开始,为我的冗长和结构不合理的原始帖子道歉。

我的问题基本上是这样的:是否可以取一个数组并将其分成三个相等的部分,将每个部分发送到一个散列,其中有三个键值对,如下所述?

示例输入:数组数组,如:

orig_array = [[13, 11, 19, 17, 12, 5, 3], [3, 9, 2, 20], [5, 21, 15, 4], 
[18, 14, 16, 10], [6, 1, 8, 7], [15, 4, 17, 6], [3, 19, 13, 14], [9, 21, 12, 7], 
[20, 11, 2, 18], [8, 10, 1, 16], [10, 6, 21, 17], [15, 11, 14, 19], [13, 2, 9, 18], 
[5, 12, 16, 7], [20, 4, 1,8]]

所需输出:一个散列,其中每个键是一个以1开头并向上计数的数字,每个值是数组的三分之一,如:

hash = { 1=>[[array of arrays containing first 1/3rd elements from orig_array]], 
         2=>[[array of arrays containing next 1/3rd elements from orig_array]]
         3=>[[array of arrays containing next 1/3rd remaining elements from orig_array]]}

要清楚,这是课堂练习的一部分。这个练习不是要找到一种方法来划分像这样的数组,我只是觉得这样做可能是一个潜在解决方案的一部分,我正在寻找指导。谢谢!

1 个答案:

答案 0 :(得分:4)

def unique_group_of_three(array)    
    multiple = array.size / 3
    return "Your collection is too small" if multiple < 5
    multiples = [multiple, multiple *2]
    array = array.shuffle

    {
        :first => array[0...multiple].uniq,
        :second => array[multiple...multiples[1]].uniq, 
        :third => array[multiples[1]..-1]].uniq
    }
end