我有一个输出不同数量的数组的方法,如下所示:
[["unidentified object", 50], ["person", 22], ["car", 55], ["SUV", 32], ["large_vehicle", 76]]
[["unidentified object", 167], ["person", 104], ["car", 265], ["SUV", 129], ["large_vehicle", 355]]
[["unidentified object", 1963], ["person", 413], ["car", 1962], ["SUV", 996], ["large_vehicle", 2027]]
[["unidentified object", 1526], ["person", 373], ["car", 1560], ["SUV", 765], ["large_vehicle", 1706]]
[["unidentified object", 1234], ["person", 316], ["car", 1705], ["SUV", 895], ["large_vehicle", 1712]]
Run Code Online (Sandbox Code Playgroud)
但是,我真的希望有一个散列,其中包含所有数组中每个项目的总计,例如:
[{:class => "unidentified object", :count => 7234}, {:class => "person", :count => 5231}, {...}]
Run Code Online (Sandbox Code Playgroud)
那有意义吗?我完全需要了解数组和哈希方法的工作原理,但任何提示都会有所帮助.
这应该做的伎俩:
data = [
[["unidentified object", 50], ["person", 22], # ...
# ...
]
pairs = data.flatten(1)
grouped_by_class = pairs.group_by(&:first)
output = grouped_by_class.map do |cls, list|
{:class => cls, :count => list.map(&:last).inject(&:+)}
end
Run Code Online (Sandbox Code Playgroud)
除非你有充分的理由希望输出完全像你描述的那样,我建议你选择更简单的东西{'unidentified object' => 7234, ...},你可以用这段代码作为输出:
data.flatten(1).inject(Hash.new(0)) do |h, (cls, count)|
h[cls] += count
h
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1263 次 |
| 最近记录: |