Создать многомерный хэш (ruby on rails) - PullRequest
0 голосов
/ 11 декабря 2019

Я новичок в ruby ​​на рельсах и пытаюсь создать многомерный хеш из разных массивов.

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}}}.

Я хочу многомерный хэш, если это возможно. Я не знаю, как получить доступ к следующему ключу + значению, чтобы создать многомерный хеш. Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 15 декабря 2019
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"}, это не то, что вы хотите здесь, но я подумал, что упомяну это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...