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