Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Ruby数组重新组织为哈希_Ruby_Arrays_Hash - Fatal编程技术网

将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}