Итерация хешей массивов для создания массива массивов - PullRequest
0 голосов
/ 25 мая 2018

Предположим, у меня есть хеш

@attribute_type = {
  typeA: ['a', 'b', 'c'],
  typeB: ['1', '2', '3'],
  typeC: ['9', '8', '7']
}

Я хочу перебрать значения, чтобы создать массив, содержащий все различные возможные комбинации трех массивов, например:

['a', '1', '9'], ['a', '1', '8'], ['a', '1', '7'], ['a', '2', '9'], ...

Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Мои 2 цента.

Почти так же, как Кэри Свовеланд, но только одна строка:

h.values.first.product(*h.values.drop(1))
0 голосов
/ 25 мая 2018
h = { :typeA=>['a','b','c'], :typeB=>['1','2','3'], :typeC=>['9','8','7'] }

first, *rest = h.values
  #=> [["a", "b", "c"], ["1", "2", "3"], ["9", "8", "7"]]
first.product(*rest)
  #=> [["a", "1", "9"], ["a", "1", "8"], ["a", "1", "7"],
  #    ["a", "2", "9"], ["a", "2", "8"], ["a", "2", "7"],
  #    ["a", "3", "9"], ["a", "3", "8"], ["a", "3", "7"],
  #    ["b", "1", "9"], ["b", "1", "8"], ["b", "1", "7"],
  #    ["b", "2", "9"], ["b", "2", "8"], ["b", "2", "7"],
  #    ["b", "3", "9"], ["b", "3", "8"], ["b", "3", "7"],
  #    ["c", "1", "9"], ["c", "1", "8"], ["c", "1", "7"],
  #    ["c", "2", "9"], ["c", "2", "8"], ["c", "2", "7"],
  #    ["c", "3", "9"], ["c", "3", "8"], ["c", "3", "7"]]

См. Массив # product .

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