h = { a: [1, 2, 3], b: [:d, :e, :f], c: ["g", "h", "i"] }
first, *rest = h.values
first.product(*rest)
#=> [[1, :d, "g"], [1, :d, "h"], [1, :d, "i"], [1, :e, "g"],
# [1, :e, "h"], [1, :e, "i"], [1, :f, "g"], [1, :f, "h"],
# [1, :f, "i"], [2, :d, "g"], [2, :d, "h"], [2, :d, "i"],
# [2, :e, "g"], [2, :e, "h"], [2, :e, "i"], [2, :f, "g"],
# [2, :f, "h"], [2, :f, "i"], [3, :d, "g"], [3, :d, "h"],
# [3, :d, "i"], [3, :e, "g"], [3, :e, "h"], [3, :e, "i"],
# [3, :f, "g"], [3, :f, "h"], [3, :f, "i"]]
См. Массив # product .
В качестве альтернативы можно написать:
values = h.values
values.shift.product(*values)