将两个可能不同大小的数组组合成散列

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[]

的文档

更新:

刚刚意识到它不是一对一的映射

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 应该可以解决问题