将Ruby数组重新组织为哈希
我有一个将Ruby数组重新组织为哈希,ruby,arrays,hash,Ruby,Arrays,Hash,我有一个产品的数组,每个产品都有一个名称和一个类别。我想生成一个散列,其中每个键都是一个类别字符串,每个元素都是该类别的产品,类似于以下内容: { "Apple" => [ <Golden Delicious>, <Granny Smith> ], ... "Banana" => ... {“苹果”=>[,]。。。 “香蕉”=>。。。 这可能吗?h=Hash.new{h,k{h[k]=[]} h = Hash.new {|h, k| h[k] = []
产品的数组
,每个产品都有一个名称和一个类别。我想生成一个散列,其中每个键都是一个类别字符串,每个元素都是该类别的产品,类似于以下内容:
{ "Apple" => [ <Golden Delicious>, <Granny Smith> ], ...
"Banana" => ...
{“苹果”=>[,]。。。
“香蕉”=>。。。
这可能吗?h=Hash.new{h,k{h[k]=[]}
h = Hash.new {|h, k| h[k] = []}
products.each {|p| h[p.category] << p}
products.each{p|h[p.category]在1.8.7+中,或者在具有主动_支持(我认为是面)的情况下,您可以通过以下方式使用group_:
products.group_by {|prod| prod.category}
#人人共享
#p代表产品
new|array=products.injection({}){a,p|a[p.category.name]|a[p.category.name]oneliner
arr = [["apple", "granny"],["apple", "smith"], ["banana", "chiq"]]
h = arr.inject(Hash.new {|h,k| h[k]=[]}) {|ha,(cat,name)| ha[cat] << name; ha}
arr=[[“苹果”、“奶奶”]、[“苹果”、“史密斯”]、[“香蕉”、“奇克”]]
h=arr.inject(Hash.new{| h,k | h[k]=[]){| ha,(cat,name)| ha[cat]您在inject块的末尾缺少了一个“;a”——该块必须返回memo Hash。谢谢您的提示!但是最后一个表达式不返回Hash吗?不,它返回a[p.category.name]数组(数组#的结果是使用inject:products.inject(Hash.new([]){A[p.category.name]+=[p];A}的版本稍微短一些)
arr = [["apple", "granny"],["apple", "smith"], ["banana", "chiq"]]
h = arr.inject(Hash.new {|h,k| h[k]=[]}) {|ha,(cat,name)| ha[cat] << name; ha}