簡體   English   中英

計算紅寶石數組中的重復項並存儲在哈希中

[英]counting duplicates in ruby array and storing in 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

即將它們保留為單獨的哈希?

如果我做對了,您需要以下內容:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM