我有一个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
所以基本上我希望密钥成为我的数组的前两列。
答案 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