【发布时间】:2009-09-10 14:34:19
【问题描述】:
我有一个Products 数组,每个数组都有一个名称和一个类别。我想生成一个散列,其中每个键都是一个类别字符串,每个元素都是具有该类别的产品,类似于以下内容:
{ "Apple" => [ <Golden Delicious>, <Granny Smith> ], ...
"Banana" => ...
这可能吗?
【问题讨论】:
我有一个Products 数组,每个数组都有一个名称和一个类别。我想生成一个散列,其中每个键都是一个类别字符串,每个元素都是具有该类别的产品,类似于以下内容:
{ "Apple" => [ <Golden Delicious>, <Granny Smith> ], ...
"Banana" => ...
这可能吗?
【问题讨论】:
在 1.8.7+ 或使用 active_support(或方面,我认为),您可以使用 group_by:
products.group_by {|prod| prod.category}
【讨论】:
h = Hash.new {|h, k| h[k] = []}
products.each {|p| h[p.category] << p}
【讨论】:
单人班
arr = [["apple", "granny"],["apple", "smith"], ["banana", "chiq"]]
h = arr.inject(Hash.new {|h,k| h[k]=[]}) {|ha,(cat,name)| ha[cat] << name; ha}
:-)
但我同意,#group_by 更优雅。
【讨论】:
# a for all
# p for product
new_array = products.inject({}) {|a,p| a[p.category.name] ||= []; a[p.category.name] << p}
【讨论】: