我正在创建一个哈希,其键是一个哈希,值是一个数组。如,
shop = Hash.new
items.each do |item|
grouping_key = {
'name'=> item['name'],
'value'=> item['value']
}
shop [grouping_key] ||= Array.new
shop [grouping_key] << item
end
在这里,我根据分组键对每个项目进行分组。对于以下项目:
Item1 = {'name'=>'test', 'value'=>10, 'color'=>'black', 'description'=>'item1'}
Item2 = {'name'=>'test2', 'value'=>10, 'color'=>'blue', 'description'=>'item2'}
Item3 = {'name'=>'test', 'value'=>10, 'color'=>'black', 'description'=>'item3'}
Item4 = {'name'=>'test2', 'value'=>10, 'color'=>'blue', 'description'=>'item4'}
我的店铺哈希将是:
shop = {{'name'=>'test', 'value'=>10}=>[Item1, Item3], {name=>test2, value=>10}=>[Item2, Item4]}
我想为散列键添加颜色,但不是分组键的一部分。是否可以这样做而不重复哈希并修改它? e.g。
shop = {{'name'=>'test', 'value'=>10, 'color'=>'black'}=>[Item1, Item3], {'name'=>'test2', 'value'=>10, 'color'=>'blue'}=>[Item2, Item4]}
任何其他方法也会有所帮助。
答案 0 :(得分:1)
您的初始代码相当于
shop = items.group_by do | i |
{'name' => i['name'], 'value' => i['value'] }
end
要将颜色添加到键哈希,只需执行
shop = items.group_by do | i |
{'name' => i['name'], 'value' => i['value'], 'color' => i['color'] }
end
现在,您也按颜色进行分组。
如果这不是您的意图(“但不作为分组键的一部分”),即如果可能存在具有相同名称和值但颜色不同的项目,并且这些项目将进入同一组,那么您首先必须决定组中哈希的颜色。
在这种情况下,对哈希进行后处理将是最简单的:
shop = items.group_by do | i |
{'name' => i['name'], 'value' => i['value'] }
end
shop.keys.each { | h | h['color'] = shop[h].sample['color'] }