ruby-on-rails - 创建多维哈希(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}}}.
如果可能的话,我想要一个多维哈希。我不知道如何访问下一个键 + 值来构建多维哈希。谢谢你的帮助!
解决方案
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!
,因此请注意issues
和issuetimes
数组将从该解决方案中更改。如果您不希望这样,我会使用该dup
方法复制这些数组。
在一些相关的注释中,当涉及到从数组创建散列时,您可能需要查看zip 。Hash[persons.zip(projects)] // {"person1"=>"project1", "person2"=>"project2", "person3"=>"project3"}
,这不是你想要的,但我想我会提到它。