我的输入数据:
[
{"discount_code"=>"LAKR", "affiliate_name"=>"Jasbir Singh"},
{"discount_code"=>"LAKR", "affiliate_name"=>"Jasbir Singh"},
{"discount_code"=>"LAKR", "affiliate_name"=>"Jasbir Singh"},
{"discount_code"=>"LAKR", "affiliate_name"=>"Jasbir Singh"},
{"discount_code"=>"LAKR", "affiliate_name"=>"Jasbir Singh"},
{"discount_code"=>"LAKR", "affiliate_name"=>"Jasbir Singh"},
{"discount_code"=>"4567", "affiliate_name"=>"an"},
{"discount_code"=>"LAKR", "affiliate_name"=>"Jasbir Singh"}
]
Run Code Online (Sandbox Code Playgroud)
我想将其转换为:
[
{"discount_code"=>"LAKR", "count"=>7, "affiliate_name"=>"Jasbir Singh"},
{"discount_code"=>"4567", "count"=>1, "affiliate_name"=>"Jasbir Singh"}
]
Run Code Online (Sandbox Code Playgroud)
这具有输入数据,其具有其出现次数的计数,并且没有重复值.
如果arr是你的数组:
arr.group_by(&:itself).map { |h,v| h.merge("count"=>v.size) }
#=> [{"discount_code"=>"LAKR", "count"=>7, "affiliate_name"=>"Jasbir Singh"},
# {"discount_code"=>"4567", "count"=>1, "affiliate_name"=>"Jasbir Singh"}]
Run Code Online (Sandbox Code Playgroud)
步骤:
h = arr.group_by(&:itself)
#=> {{"discount_code"=>"LAKR", "affiliate_name"=>"Jasbir Singh"}=>
# [{"discount_code"=>"LAKR", "affiliate_name"=>"Jasbir Singh"},
# {"discount_code"=>"LAKR", "affiliate_name"=>"Jasbir Singh"},
# {"discount_code"=>"LAKR", "affiliate_name"=>"Jasbir Singh"},
# {"discount_code"=>"LAKR", "affiliate_name"=>"Jasbir Singh"},
# {"discount_code"=>"LAKR", "affiliate_name"=>"Jasbir Singh"},
# {"discount_code"=>"LAKR", "affiliate_name"=>"Jasbir Singh"},
# {"discount_code"=>"LAKR", "affiliate_name"=>"Jasbir Singh"}],
# {"discount_code"=>"4567", "affiliate_name"=>"an"}=>
# [{"discount_code"=>"4567", "affiliate_name"=>"an"}]}
enum = h.map
#=> #<Enumerator: {
# {"discount_code"=>"LAKR", "affiliate_name"=>"Jasbir Singh"}=>
# [{"discount_code"=>"LAKR", "affiliate_name"=>"Jasbir Singh"},
# ...
# {"discount_code"=>"LAKR", "affiliate_name"=>"Jasbir Singh"}],
# {"discount_code"=>"4567", "affiliate_name"=>"an"}=>
# [{"discount_code"=>"4567", "affiliate_name"=>"an"}]}:map>
enum.each { |h,v| h.merge("count"=>v.size) }
#=> [{"discount_code"=>"LAKR", "affiliate_name"=>"Jasbir Singh", "count"=>7},
# {"discount_code"=>"4567", "affiliate_name"=>"an", "count"=>1}]
Run Code Online (Sandbox Code Playgroud)
第一个元素enum传递给块并分配给块变量:
h,v = enum.next
#=> [{"discount_code"=>"LAKR", "affiliate_name"=>"Jasbir Singh"},
# ...
# {"discount_code"=>"LAKR", "affiliate_name"=>"Jasbir Singh"}]]
h #=> {"discount_code"=>"LAKR", "affiliate_name"=>"Jasbir Singh"}
v #=> [{"discount_code"=>"LAKR", "affiliate_name"=>"Jasbir Singh"},
# ...
# {"discount_code"=>"LAKR", "affiliate_name"=>"Jasbir Singh"}]
Run Code Online (Sandbox Code Playgroud)
并执行块计算:
h.merge("count"=>v.size)
#=> h.merge("count"=>7)
#=> {"discount_code"=>"LAKR", "affiliate_name"=>"Jasbir Singh", "count"=>7}
Run Code Online (Sandbox Code Playgroud)
剩下的计算是类似的.
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |