我有一个以下格式的数组:
arr = [
["OMAA002S16001006 1088", 13],
["OMAA002S16001006 1088", 13],
["OMAA002S16001006 1088", 10],
["OMRA001S16116037 1001", 10],
["OMRA001S16116037 0110", 9],
["OMAA002S16001014 0119", 9],
["OMAA002S16001002 0134", 9]
]
Run Code Online (Sandbox Code Playgroud)
第一个条目是相同的代码,但具有不同的数字.什么是使条目独特并总结右边值的最佳方法?结果应该是这样的:
[
["OMAA002S16001006 1088", 36],
["OMRA001S16116037 1001", 10],
["OMRA001S16116037 0110", 9],
["OMAA002S16001014 0119", 9],
["OMAA002S16001002 0134", 9]
]
Run Code Online (Sandbox Code Playgroud)
使用Enumerable#each_with_object:
arr.each_with_object(Hash.new(0)) { |(k, v), h| h[k] += v }
#=> {"OMAA002S16001006 1088"=>36,
# "OMRA001S16116037 1001"=>10,
# "OMRA001S16116037 0110"=>9,
# "OMAA002S16001014 0119"=>9,
# "OMAA002S16001002 0134"=>9}
Run Code Online (Sandbox Code Playgroud)
您可以调用to_a将其转换回数组.
arr.group_by(&:first).map { |k, v| [k, v.map(&:last).reduce(:+)] }
#=> [["OMAA002S16001006 1088", 36],
# ["OMRA001S16116037 1001", 10],
# ["OMRA001S16116037 0110", 9],
# ["OMAA002S16001014 0119", 9],
# ["OMAA002S16001002 0134", 9]]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
281 次 |
| 最近记录: |