首页 > 解决方案 > 创建多维哈希(ruby on rails)

问题描述

我是 ruby​​ on rails 的新手,并试图从不同的数组中创建多维哈希。

persons= [person1, person2, person3, person4]
projects= [project1, project2, project3]
issues= [1000, 10001, 1002, 1003, 1004,1005,1006,1007,1008,1009,1010]
issuetime = [1, 2 , 3, 4, 5]

我想要这样的哈希:

hash = {person 1 =>{project1 => {1000, 1001, 1002 => {1,2,3}}}, person2 =>{project1 => {1003, 1004, 1005 => {3,4,5}}}}

我试过:

    hash= {}
persons.each_with_index do [person,i]
 if hash.has_key?(person)
  hash[person] << projects[i]
 else
 hash[person] = [projects[i]]
 end
end

这是有效的,但它只向我显示:

hash = {{person 1 =>{project1}}, {person2=>{project2}}}.

如果可能的话,我想要一个多维哈希。我不知道如何访问下一个键 + 值来构建多维哈希。谢谢你的帮助!

标签: ruby-on-rails

解决方案


persons = ['person1', 'person2', 'person3']
projects = ['project1', 'project2', 'project3']
issues = [1000, 10001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010]
issuetimes = [1, 2 ,3, 4, 5, 6, 7, 8, 9]


persons.each_with_object({}).with_index do |(person, hsh), index|
  hsh[person] = { 
    projects[index] => { 
      issues.slice!(0, 3) => issuetimes.slice!(0, 3) 
    }
  }
end

这会给你。{"person1"=>{"project1"=>{[1000, 10001, 1002]=>[1, 2, 3]}}, "person2"=>{"project2"=>{[1003, 1004, 1005]=>[4, 5, 6]}}, "person3"=>{"project3"=>{[1006, 1007, 1008]=>[7, 8, 9]}}}

关于这个问题有几点需要注意。

  • {1000, 1001, 1002 => {1,2,3}}不是有效的哈希,因为它会引发错误。但是,您可以执行以下操作[1, 2, 3]=>[4, 5, 6]},因此我上面的回答假设这是您想要做的。
  • 我的解决方案使用 的破坏性形式slice!,因此请注意issuesissuetimes数组将从该解决方案中更改。如果您不希望这样,我会使用该dup方法复制这些数组。

在一些相关的注释中,当涉及到从数组创建散列时,您可能需要查看zip 。Hash[persons.zip(projects)] // {"person1"=>"project1", "person2"=>"project2", "person3"=>"project3"},这不是你想要的,但我想我会提到它。


推荐阅读