【问题标题】:Ruby: Turn an array of arrays into a hash with 3 key value pairsRuby:将数组数组转换为具有 3 个键值对的散列
【发布时间】:2014-07-03 05:46:23
【问题描述】:

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

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

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

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

明确地说,这是课程练习的一部分。练习不是要找到一种方法来划分这样的数组,我只是觉得这样做可能是一个潜在解决方案的一部分,并且正在寻找指导。谢谢!

【问题讨论】:

  • 我很难集中精力完成这项运动。它是字符串数组还是数组数组?当您将其转换为哈希时,什么会确定分组和键?
  • 向我们展示您尝试过的示例输入和预期输出
  • 我最初发错了,因为我没有写完,你一定马上找到了。无论如何 - 我从一个字符串数组开始,然后我使用上面的代码创建了一个字符串数组。
  • 如果您要投反对票,请留言说明原因。匿名投反对票并不能帮助我了解如何正确使用这个论坛。
  • @Chuck 分组将由有 3 个列表的要求确定。键可以是从 0 或 1 开始并计数到 3 的数字。我想有一种简单的方法可以将数组拆分为三个部分,并将每个部分发送到 key = 1(或“part one" - 随便),值是我要拆分的数组的三分之一。

标签: ruby arrays hash enumerable


【解决方案1】:
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

【讨论】:

  • 这很酷,谢谢!我只需要重新安排第 2 行的写入方式为 multiple = array.size/3 以使其运行而不会出现错误,并且我取出了 array = array.shuffle 因为我的代码在该方法的前面部分进行了洗牌。不得不承认,我还不太明白它是如何工作的,但我正在努力。谢谢!
  • 你是对的,第 2 行是倒退的。 array[0...multiple].uniq 将数组的第一个元素直到数组的“多个”元素之前的元素,并从这些元素中创建一个新数组,而 Array#uniq 删除可能在其中的任何重复项数组。
  • 我认为这有一个错误,它会丢弃长度不是三的偶数倍数的数组的元素,尽管这种情况在 OP 中没有很好地指定。此外,一个不丢弃元素而是只有一个比其他桶小的版本可以简明地表示为Hash[ array.shuffle.each_slice((array.length/3.0).ceil).map.with_index {|e, i| [i+1, e] } ]
  • 针对那些被丢弃的元素进行了修改。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-18
  • 2015-06-12
  • 1970-01-01
  • 2015-07-01
  • 2021-11-08
  • 2018-08-07
  • 1970-01-01
相关资源
最近更新 更多