将两个可能不同大小的数组组合成散列
combine two arrays of possibly different sizes into hash
如何将这两个数组组合成一个散列。它们可能大小相同,也可能不同。
@status_array = ["ready", "required", "processing", "approval", "live"]
@part_milestones = [#<Milestone id: 657707, data_type: "ready">, #<Milestone id: 657708, data_type: "required">, #<Milestone id: 657709, data_type: "approval">]
它们已经排序了。我只需要散列来正确处理 "blanks" 就像这样:
{"ready"=>#<Milestone id: 657707, data_type: "ready">, "required"=>#<Milestone id: 657708, data_type: "required">, "processing"=>nil, "approval"=>#<Milestone id: 657709, data_type: "approval">, "live"=>nil}
可以使用zip将数组合并成二维,然后使用下面的方法转换成hash
Hash[@status_array.zip(@part_milestones)]
的文档
更新:
刚刚意识到它不是一对一的映射
hash = {}
@status_array.each do |status|
hash[status] = @part_milestone.find{|milestone| milestone.data_type == status}
end
我知道最干净的方法是:
hash = @status_array.inject({}) do |result_hash, status|
result_hash[status] = @part_milestones.select { |milestone| milestone.data_type == status }.first
result_hash
end
@part_milestones.sort_by &:data_type
应该可以解决问题
如何将这两个数组组合成一个散列。它们可能大小相同,也可能不同。
@status_array = ["ready", "required", "processing", "approval", "live"]
@part_milestones = [#<Milestone id: 657707, data_type: "ready">, #<Milestone id: 657708, data_type: "required">, #<Milestone id: 657709, data_type: "approval">]
它们已经排序了。我只需要散列来正确处理 "blanks" 就像这样:
{"ready"=>#<Milestone id: 657707, data_type: "ready">, "required"=>#<Milestone id: 657708, data_type: "required">, "processing"=>nil, "approval"=>#<Milestone id: 657709, data_type: "approval">, "live"=>nil}
可以使用zip将数组合并成二维,然后使用下面的方法转换成hash
Hash[@status_array.zip(@part_milestones)]
的文档
更新:
刚刚意识到它不是一对一的映射
hash = {}
@status_array.each do |status|
hash[status] = @part_milestone.find{|milestone| milestone.data_type == status}
end
我知道最干净的方法是:
hash = @status_array.inject({}) do |result_hash, status|
result_hash[status] = @part_milestones.select { |milestone| milestone.data_type == status }.first
result_hash
end
@part_milestones.sort_by &:data_type
应该可以解决问题