计算ruby数组中的重复项并存储在哈希中

时间:2014-08-12 14:51:55

标签: mysql ruby arrays hash

我有一个来自像这样的

的mysql查询的数组
section, views
aa, 2
aa, 100
bb, 2
bb, 3
bb, 100

我正在使用此代码对其进行排序

b = Hash.new(0)
array.each do |row|
  ....
  ....
  b[section] += 1
end

目前为我提供b[2]

的结果哈希值
aa,2
bb,3

现在我希望mysql查询过滤小于和大于50的视图,并希望结果为

section,small,large
aa,1,1
bb,2,1

我该如何实现?或者更容易做这样的事情:

aa_small,1
aa_large,1
bb_small,2
bb_large,1

即。把它们作为单独的哈希值?

1 个答案:

答案 0 :(得分:0)

如果我做得对,你需要这样的东西:

views = 
    [['aa', 2],
     ['aa', 100],
     ['bb', 2],
     ['bb', 3],
     ['bb', 100]]

views
  .group_by(&:first)
  .map { |v, vs| [v, vs.partition { |_, x| x < 50 }
                       .map(&:length)] }
# => [["aa", [1, 1]], ["bb", [2, 1]]]

或者如果你想要哈希:

Hash[views
       .group_by(&:first)
       .map { |v, vs| [v, vs.partition { |_, x| x < 50 }
                            .map(&:length)] }]
# => {"aa"=>[1, 1], "bb"=>[2, 1]}