Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.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 on rails rails对哈希数组进行分组_Ruby On Rails_Arrays_Hash - Fatal编程技术网

Ruby on rails rails对哈希数组进行分组

Ruby on rails rails对哈希数组进行分组,ruby-on-rails,arrays,hash,Ruby On Rails,Arrays,Hash,我知道这是一个简单的问题,但对我来说太简单了,我尝试了很多小时,但都没有成功,所以我希望能找到答案 我有这样的散列数组 array = [{date: 1, branch: 1, value: "100"}, {date: 1, branch: 2, value: "200"}, {date: 2, branch: 1, value: "500"}, {date: 3, branch: 2, value: "500"}, {date: 3, branch: 3, value: "300"}]

我知道这是一个简单的问题,但对我来说太简单了,我尝试了很多小时,但都没有成功,所以我希望能找到答案

我有这样的散列数组

array = [{date: 1, branch: 1, value: "100"}, {date: 1, branch: 2, value: "200"}, {date: 2, branch: 1, value: "500"}, {date: 3, branch: 2, value: "500"}, {date: 3, branch: 3, value: "300"}]
data = [{date: 1, 1: "100", 2: "200"}, {date: 2, 1: "500"}, {date: 3, 2: "500", 3: "300"}]
我想这样把它分组

array = [{date: 1, branch: 1, value: "100"}, {date: 1, branch: 2, value: "200"}, {date: 2, branch: 1, value: "500"}, {date: 3, branch: 2, value: "500"}, {date: 3, branch: 3, value: "300"}]
data = [{date: 1, 1: "100", 2: "200"}, {date: 2, 1: "500"}, {date: 3, 2: "500", 3: "300"}]
在数组=[{date:1,branch:1,value:“100”}中,我想取branch和value的值,并像这样组合它1:“100”


无论如何,我可以做到这一点,如果使用循环或case时方法

可能会缩短,则没有问题,但它可以工作:

array.group_by { |h| h[:date] }.map do |k, v|
  [:date, k, *v.map { |h| [h[:branch], h[:value]] }]
end.map { |x| Hash[*x.flatten] }
# => [{:date=>1, 1=>"100", 2=>"200"}, {:date=>2, 1=>"500"}, {:date=>3, 2=>"500", 3=>"300"}]

可能可以缩短,但它有效:

array.group_by { |h| h[:date] }.map do |k, v|
  [:date, k, *v.map { |h| [h[:branch], h[:value]] }]
end.map { |x| Hash[*x.flatten] }
# => [{:date=>1, 1=>"100", 2=>"200"}, {:date=>2, 1=>"500"}, {:date=>3, 2=>"500", 3=>"300"}]
另一个解决方案

array = [{date: 1, branch: 1, value: "100"}, {date: 1, branch: 2, value: "200"}, {date: 2, branch: 1, value: "500"}, {date: 3, branch: 2, value: "500"}, {date: 3, branch: 3, value: "300"}]
data = array.inject({}) do |res, val| 

  if res[val[:date]]
    res[val[:date]].merge!({val[:branch] => val[:value]})
  else 
    res.merge!(val[:date] => {val[:branch] => val[:value]})
  end  
  res  
end
puts data.collect{|key, val| {date: key}.merge!(val)}
另一个解决方案

array = [{date: 1, branch: 1, value: "100"}, {date: 1, branch: 2, value: "200"}, {date: 2, branch: 1, value: "500"}, {date: 3, branch: 2, value: "500"}, {date: 3, branch: 3, value: "300"}]
data = array.inject({}) do |res, val| 

  if res[val[:date]]
    res[val[:date]].merge!({val[:branch] => val[:value]})
  else 
    res.merge!(val[:date] => {val[:branch] => val[:value]})
  end  
  res  
end
puts data.collect{|key, val| {date: key}.merge!(val)}

哇,它完全有效,这完全是我的想法,任何网站或参考,我可以阅读有关阵列地图,我应该更多地了解这一点,@azy的文档解释一切与例子:哇,它完全有效,这完全是我的想法,任何网站或参考,我可以阅读阵列地图,我应该更多地了解这一点,@azy的文档通过示例解释了所有内容: