Todas las combinaciones posibles de un hash de matrices en Ruby

Lo que tengo

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 necesito

Necesito 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 = 20bitrate = 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?

Lo que (probablemente) no necesito:

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.

Respuestas a la pregunta(6)

Su respuesta a la pregunta