Todas las combinaciones posibles de un hash de matrices en Ruby
Digamos que tengo un hash como este, con varios valores que pertenecen a un parámetro.
a = {}
a[:bitrate] = ["100", "500", "1000"]
a[:fps] = ["15", "30"]
a[:qp] = ["20", "30"]
Lo que necesitoNecesito alguna forma de obtener iterativamentetodo las posibles combinaciones de estos valores, entonces, con todos los pares de parámetros / valores:
bitrate = 100
, fps = 15
, qp = 20
bitrate = 500
, fps = 15
, qp = 30
...El número de parámetros (es decir, las claves) y el número de valores (es decir, la longitud de las matrices de valores) no se conocen de antemano. Idealmente, haría algo como:
a.foo do |ret|
puts ret.keys # => ["bitrate", "fps", "qp"]
puts ret.values # => ["100", "15", "20"]
end
... donde se llama al bloque para cada combinación posible. ¿Cómo puedo definirfoo
?
Ahora, sé esto:Combine la matriz de la matriz en todas las combinaciones posibles, solo hacia adelante, en Ruby, sugiriendo algo como:
a.first.product(*a[1..-1]).map(&:join)
Pero esto opera en valores y matrices solo en matrices, y necesito la referencia original al nombre del parámetro.