2011-08-03 207 views
2

我从数据库中提取数据并将其存储在两个数组中,一个数组包含数据的标签,另一个包含数据。我需要以某种方式操作数组,以便为​​每组数据都有一个标签。如何根据另一个数组中的并行值对一个数组中的数据进行分组?

阵列现在

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

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

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

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

+0

不要在两个数组的位置总是相互对应?就像将位置'0'始终是以太'开发'和'DevXXX'或者他们可以混合在两个阵列? –

+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([]),否则你会用两个哈希条目在同一阵列指向结束和这只会让事情变得混乱。

参考文献:

+0

我会给这个镜头。谢谢。 –

+0

这很好。谢谢! –

+0

@Hunter:你可能想熟悉[Array](http://www.ruby-doc.org/core/classes/Array.html),[Enumerable](http://www.ruby-doc。 org/core/classes/Enumerable.html)和[Hash](http://www.ruby-doc.org/core/classes/Hash.html)。那里有各种有用的东西。 –

1

为什么不把它存储为散列?通过两个阵列的

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

数据已经从XML文件读入数组,这两个数组都是我必须使用的。我无法改变如何存储数据。来自Java的 –

1

一个不怎么红宝石的解决方案,这将是刚刚循环使用迭代器,并以此作为你:

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

然后,你可以使用“发展”的数据是这样需要他们。

+1

,这是我的第一个想法。当我输入解决方案时,我停止了,因为它的非Ruby-ish-ness –

相关问题