通过唯一键对来自2个阵列的数据进行分组

时间:2011-11-07 11:08:35

标签: ruby-on-rails ruby arrays hash

新的铁杆和挣扎了一下!!帮助

所以我有2个数组(一个用于员工工作细节,另一个用于员工个人详细信息),两个数组都包含将信息绑定在一起的唯一对应密钥(员工代码)。

如何通过员工代码将这些数组存储到哈希中,因此需要将工作详细信息和个人详细信息绑定在唯一键上。

我尝试了各种排序方法,但似乎没有什么可以做的。

最后,我希望能够打印出所有员工的清单,并将所有详细信息显示在一起。

员工:姓名:John Key:001等 DETAILS:Title:Manager Key 001等

员工:姓名:Sally Key:002等 详情:标题:Admin Key 002等

依此类推......

2 个答案:

答案 0 :(得分:0)

假设“employees”是一个Employee对象数组,“details”是一个Detail对象数组...

employees.map do |employee|
  {
    :employee => employee, :details => details.select { |detail| detail.key == employee.key }
  }
end

BTW您是否有某些原因导致员工与详细信息无关? (你把它标记为Rails ......)

答案 1 :(得分:0)

Employee = Struct.new(:id, :name)
Detail = Struct.new(:id, :title)

employees = [ Employee.new(1, "John"), Employee.new(2, "Sally") ]
details   = [ Detail.new(2, "Admin"), Detail.new(1, "Manager") ]

Hash[
  employees.map do |employee|
    detail = details.find { |d| d.id == employee.id }
    [ employee.id, { :employee => employee, :detail => detail } ]
  end
]

或者如果您知道两个数组中都存在所有ID:

Hash[
  employees.sort_by { |e| e.id }.zip(details.sort_by { |d| d.id }).map do |e,d|
    [ e.id, { :employee => e, :detail => d } ]
  end
]

给出:

{
  1 => {
    :employee => #<struct Employee id=1, name="John">,
    :details  => #<struct Detail id=1, title="Manager">
  },
  2 => {
    :employee => #<struct Employee id=2, name="Sally">,
    :details  => #<struct Detail id=2, title="Admin">
  }
}