Не совсем уверен, что вопрос полностью сформирован, но я пытаюсь сделать следующее:
# where the indices correspond to attributes fore example:
# [type, status]
x = %w(a b)
y = %w(c d)
combine(x, y) #=> [["a", "b"], ["a", "d"], ["c", "a"], ["c", "b"]]
Порядок массива всегда один и тот же, поэтому обратные значения, такие как [b, a]
, не включаются в результат.
Как это называется и как эффективно реализовать это?
Я вижу Массив # перестановка , но это не совсем так ...
Мы надеемся, что это сработает для любого числа массивов и значений: combine(*arrays)
Спасибо!
Обновление
Вот лучший пример того, что я ищу:
Это (x | y).combination(x.length).to_a
производит следующее:
x = ["front_door", "open"]
y = ["back_door", "closed"]
(x | y).combination(x.length).to_a
=> [["front_door", "open"], ["front_door", "back_door"], ["front_door", "closed"], ["open", "back_door"], ["open", "closed"], ["back_door", "closed"]]
Фактический результат, который я ищу, таков:
=> [["front_door", "open"], ["front_door", "closed"], ["back_door", "open"], ["back_door", "closed"]]
Или, если это был более длинный массив:
x = ["house", "front_door", "open"]
y = ["building", "back_door", "closed"]
compute(x, y)
=> ["house", "front_door", "open"], ["house", "back_door", "open"], ["house", "front_door", "closed"], ["house", "back_door", "closed"], ["building", "front_door", "open"], ["building", "back_door", "open"], ["building", "front_door", "closed"], ["building", "back_door", "closed"]
Есть идеи?