【问题标题】:counting duplicates in ruby array and storing in hash计算 ruby​​ 数组中的重复项并存储在哈希中
【发布时间】:2014-10-05 17:02:00
【问题描述】:

我有一个来自这样的 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

即将它们保留为单独的哈希?

【问题讨论】:

    标签: mysql ruby arrays hash


    【解决方案1】:

    如果我猜对了,你需要这样的东西:

    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]}
    

    【讨论】:

      猜你喜欢
      • 2022-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-28
      • 2014-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多