-2

我有一个从数据库中获取的 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

所以基本上我希望关键是我的数组的前两列。

4

2 回答 2

2

您可以尝试以下方法:

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

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

于 2013-04-26T00:17:41.827 回答
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
于 2013-04-26T00:31:15.083 回答