Jus*_*ner 3 ruby arrays algorithm
根据原始数组中对象的属性,将大数组更改为多个子数组的最佳方法是什么?例如,我有一个对象数组(所有对象都具有相同的属性):
array = [
{:name => "Jim", :amount => "20"},
{:name => "Jim", :amount => "40"},
{:name => "Jim", :amount => "30"},
{:name => "Eddie", :amount => "7"},
{:name => "Eddie", :amount => "12"},
{:name => "Pony", :amount => "330"},
{:name => "Pony", :amount => "220"},
{:name => "Pony", :amount => "50"}
]
Run Code Online (Sandbox Code Playgroud)
请注意,具有相同名称属性的所有对象在数组中都是连续的.现在我想基于name属性将对象分组为子数组.我需要的是:
result = [
[
{:name => "Jim", :amount => "20"},
{:name => "Jim", :amount => "40"},
{:name => "Jim", :amount => "30"}
],
[
{:name => "Eddie", :amount => "7"},
{:name => "Eddie", :amount => "12"}
],
[
{:name => "Pony", :amount => "330"},
{:name => "Pony", :amount => "220"},
{:name => "Pony", :amount => "50"}
]
]
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?谢谢.
result = array.group_by { |h| h[:name] }.map { |k, v| v }
Run Code Online (Sandbox Code Playgroud)
例如:
>> results = array.group_by { |h| h[:name] }.map { |k, v| v }
>> pp results
[[{:name=>"Jim", :amount=>"20"},
{:name=>"Jim", :amount=>"40"},
{:name=>"Jim", :amount=>"30"}],
[{:name=>"Eddie", :amount=>"7"},
{:name=>"Eddie", :amount=>"12"}],
[{:name=>"Pony", :amount=>"330"},
{:name=>"Pony", :amount=>"220"},
{:name=>"Pony", :amount=>"50"}]]
Run Code Online (Sandbox Code Playgroud)
您也可以跳过map并直接进入Hash#values:
result = array.group_by { |h| h[:name] }.values
Run Code Online (Sandbox Code Playgroud)
感谢KandadaBoggu指出这种疏忽.
| 归档时间: |
|
| 查看次数: |
172 次 |
| 最近记录: |