Учитывая входной массив
[a,b,c,d,e]
и функция 'join' (a,b) => (a+b)
мой код возвращает следующий массив массивов, содержащий каждую возможную вариацию, полученную применением функции соединения к различным парам элементов при сохранении порядка:
[
[a,b,c,d,e],
[a,b+c,d,e],
[a,b+c+d,e],
[a,b,c+d,e],
[a+b,c,d,e],
[a+b,c+d,e],
[a+b+c,d,e],
[a+b+c+d,e],
[a,b,c,d+e],
[a,b+c,d+e],
[a,b+c+d+e],
[a,b,c+d+e],
[a+b,c,d+e],
[a+b,c+d+e],
[a+b+c,d+e],
[a+b+c+d+e],
]
Визуально то, что я пытаюсь сделать, это следующее:
Код работает, но я понятия не имею, как его назвать - и хотел бы использовать имя, которое поймут другие разработчики, знакомые с этой операцией, если такое имя существует. Это не набор мощности, но это нечто похожее... имеет ли эта конкретная операция set/array имя?
ИЗМЕНИТЬ: ОК. Они не являются перестановками; перестановки были бы 5-элементными массивами в разных порядках [[a,b,c,d,e], [e,d,c,b,a], [a,d,b,c,e], ...]
Они не разделы, так как любое подмножество может содержать только смежные элементы ввода. - другими словами, разделы позволят это:
(Вероятно, это связано с теорией чистого множества, не имеющей понятия упорядоченного множества.)
Они не являются комбинациями, поскольку каждый элемент вывода использует каждый член ввода, установленный ровно один раз.
Я думаю, что myArray.OrderedPartitions((a,b) => (a+b))
, вероятно, достаточно кратким и объяснительным.