Ruby Hashing - 多个密钥

时间:2013-04-26 00:00:28

标签: ruby-on-rails ruby arrays ruby-on-rails-3 hash

我有一个Ruby数组,我从数据库中得到这个,当我打印它时:

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

输出:

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

所以基本上我希望密钥成为我的数组的前两列。

2 个答案:

答案 0 :(得分:2)

您可以尝试以下方法:

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

我同意您的原始帖子的用户评论,但db应该更好地处理这个问题。

答案 1 :(得分: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