Что у меня:
Скажем, у меня такой хэш, с различными значениями, принадлежащими одному параметру.
a = {}
a[:bitrate] = ["100", "500", "1000"]
a[:fps] = ["15", "30"]
a[:qp] = ["20", "30"]
Что мне нужно:
Мне нужно каким-то образом итеративно получить all возможные комбинации этих значений, поэтому со всеми парами параметр/значение:
-
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)
Но это работает только с значениями и массивами только в массивах, и мне нужна исходная ссылка на имя параметра.