如何根据另一个阵列中的并行值对一个阵列中的数据进行分组?

时间:2011-08-03 19:12:20

标签: ruby arrays

我从数据库中提取数据并将其存储在两个数组中,一个数组包含数据标签,另一个数组包含数据。我需要以某种方式操作数组,以便为​​每组数据设置一个标签。

现在阵列

标签 - [Development, Development, Development, Development, Release, Release, Release, Release, ...]

数据 - [DevData1, DevData2, DevData3, DevData4, RelData1, RelData2, RelData3, RelData4, ...]

我只需要每组数据只有标签,但我想将数据分成多个段以与单个标签对应。有四个标签/数据对,因为这是过去四个月的数据。我会在每个第4个元素上拆分数组,但有些月份没有条目。所以我需要一种更好的方法来分割数据。

任何想法都会很棒。 感谢。

3 个答案:

答案 0 :(得分:4)

您可以将单独的数组合并到一个哈希中而不需要太多努力:

a = [:Development, :Development, :Development, :Development, :Release, :Release, :Release, :Release]
b = [:DevData1, :DevData2, :DevData3, :DevData4, :RelData1, :RelData2, :RelData3, :RelData4]
h = Hash.new { |h, k| h[k] = [ ] }
a.each_with_index { |e, i| h[e].push(b[i]) }
# h is now {:Development=>[:DevData1, :DevData2, :DevData3, :DevData4], :Release=>[:RelData1, :RelData2, :RelData3, :RelData4]}

请确保您使用的是Hash.new { |h,k| h[k] = [ ] }而不是Hash.new([]),否则您最终将会有两个指向同一个数组的哈希条目,这只会造成混乱。

参考文献:

答案 1 :(得分:1)

为什么不将它存储为哈希?

h = {"Development" => [DevData1, DevData2...], "Release" => [RelData1...]}

然后您可以访问“开发”数据,如下所示:

h["Development"]
# => [DevData1, DevData2...]

答案 2 :(得分:1)

对此的一个非常重要的解决方案就是使用迭代器遍历两个数组并在需要时使用它们。