Все возможные комбинации из хэша массивов в Ruby
Допустим, у меня есть такой хеш с различными значениями, принадлежащими одному параметру.
a = {}
a[:bitrate] = ["100", "500", "1000"]
a[:fps] = ["15", "30"]
a[:qp] = ["20", "30"]
Что мне нужно:Мне нужен какой-то способ итеративно получитьвсе возможные комбинации этих значений, поэтому со всеми парами параметр / значение:
bitrate = 100
, fps = 15
, qp = 20
bitrate = 500
, fps = 15
, qp = 30
...Количество параметров (то есть ключей) и количество значений (то есть длина массивов значений) заранее неизвестны. В идеале я бы сделал что-то вроде:
a.foo do |ret|
puts ret.keys # => ["bitrate", "fps", "qp"]
puts ret.values # => ["100", "15", "20"]
end
… Где блок вызывается для каждой возможной комбинации. Как я могу определитьfoo
?
Теперь я знаю это:Объединить массив массив во все возможные комбинации, только вперед, в Ruby, предлагая что-то вроде:
a.first.product(*a[1..-1]).map(&:join)
Но это работает со значениями и массивами только в массивах, и мне нужна оригинальная ссылка на имя параметра.