2013-04-26 38 views
-2

我有一个Ruby的数组这是我从它看起来像这样,当我打印数据库中获取:红宝石散列 - 多个键

<% @Aarr.each do |row1| %> 
<%= row1[0] %> : <%= row1[1] %> : <%= row1[2] %> 
<br> 
<% end %> 

OUTPUT:

10.0.1.50 : 8k : IP 
10.0.1.50 : 8k : UMTS 
10.0.1.51 : 8k : IP 
10.0.1.51 : 8k : UMTS 
10.0.1.50 : 9k : IP 
10.0.1.50 : 9k : Stability 
10.0.1.50 : 9k : UMTS 
11.0.1.50 : 9k : IP 
11.0.1.50 : 9k : UMTS 

我想申请某种散列在这使得结果应该是以下几点:

10.0.1.50 : 8k : 2 
10.0.1.51 : 8k : 2 
10.0.1.50 : 9k : 3 
11.0.1.50 : 9k : 2 

所以基本上我想关键是前两个合作我的阵列的列。

+3

你尝试过什么然而? – GoZoner 2013-04-26 00:07:32

+1

你有特别的问题,而不是“为我做我的工作”吗? – 2013-04-26 00:09:32

+0

什么是您当前的数据库查询? – 2013-04-26 00:10:22

回答

2

你可以尝试以下方法:

result = {} 
@your_array.map{|row| "#{row[0]} : #{row[1]}"}.each do |key| 
    result[key] = (result[key] ||= 0) + 1 
end 

我虽然与您的原始信息的用户的意见一致,分贝应该处理这更好的。

+0

不错的答案,+1。如果你想要的话,你可以使用'each_with_object'去掉额外的本地。 – iain 2013-04-26 00:27:26

+0

@iain新来红宝石,这么多学习!感谢提示! – 2013-04-26 00:32:35

2

您可以通过前两列用group_by将它们分组,然后返回各组的长度得到你想要的输出:

arr.group_by{|row| row.take(2)}.map{|k,v| [k, v.length].flatten.join " : "} 

输出:

10.0.1.50 : 8k : 2 
10.0.1.51 : 8k : 2 
10.0.1.50 : 9k : 3 
11.0.1.50 : 9k : 2