Учитывая набор возможных значений и хеш произвольного количества значений, как я могу заменить каждое значение nil
любой возможной комбинацией возможных значений?Заполнение подстановочных значений в хэше с любым возможным значением
Например:
values = %w[a b c]
hash = { x:1, y:2, z:nil }
fill_wildcards(hash, values)
#=> [{ x:1, y:2, z:'a' },
#=> { x:1, y:2, z:'b' },
#=> { x:1, y:2, z:'c' }]
hash = { x:1, y:nil, z:nil }
fill_wildcards(hash, values)
#=> [{ x:1, y:'a', z:'a' },
#=> { x:1, y:'a', z:'b' },
#=> { x:1, y:'a', z:'c' },
#=> { x:1, y:'b', z:'a' },
#=> { x:1, y:'b', z:'b' },
#=> { x:1, y:'b', z:'c' },
#=> { x:1, y:'c', z:'a' },
#=> { x:1, y:'c', z:'b' },
#=> { x:1, y:'c', z:'c' }]
я могу найти ключи, которые должны быть заменены:
wildkeys = hash.select{ |k,v| v.nil? }.map(&:first)
#=> [:y, :z]
И таким образом я могу find all the permutations of values needed:
wildvalues = values.repeated_permutation(wildkeys.length).to_a
#=> [["a", "a"], ["a", "b"], ["a", "c"], ["b", "a"],
#=> ["b", "b"], ["b", "c"], ["c", "a"], ["c", "b"], ["c", "c"]]
Но я не может придумать простой способ объединить эти два в оригинал.
Это последнее является совершенным. Благодарю. – Phrogz