【问题标题】:Grouping data from 2 arrays by a unique key通过唯一键对 2 个数组中的数据进行分组
【发布时间】:2011-11-07 11:08:35
【问题描述】:

刚接触rails,有点挣扎!!帮助

所以我有 2 个数组(一个用于员工工作详细信息,另一个用于员工个人详细信息),它们都包含将信息联系在一起的唯一对应键(员工代码)。

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

我尝试了各种排序方法,但似乎没有任何方法可以解决问题。

基本上最后我希望能够打印出所有员工的列表,同时显示他们的所有详细信息。

员工:姓名:John Key:001 等 详细信息:标题:经理密钥 001 等

员工:姓名:Sally 密钥:002 等 详细信息:标题:管理员密钥 002 等

等等..

【问题讨论】:

  • 你拥有的两个对象是数组还是哈希?您如何识别数组中的唯一键?听起来更像是哈希。请您发布一些示例数据结构供我们使用吗?

标签: ruby-on-rails ruby arrays hash


【解决方案1】:

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

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

顺便说一句,您是否有某些原因在员工和详细信息之间没有关联? (您将其标记为 Rails...)

【讨论】:

    【解决方案2】:
    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">
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-02-20
      • 2015-11-04
      • 2018-11-16
      • 2015-11-23
      • 2022-01-11
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多