给定输入数组
[a,b,c,d,e]
和一个“加入”功能(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],
]
在视觉上,我想要做的是:
该代码有效,但我不知道该怎么称呼它 - 如果存在这样的名称,我想使用其他熟悉此操作的开发人员会理解的名称。它不是一个幂集,但它是类似的……这个特定的集合/数组操作有名字吗?
编辑:好的。它们不是排列;排列都将是不同顺序的 5 元素数组[[a,b,c,d,e], [e,d,c,b,a], [a,d,b,c,e], ...]
它们不是partitions,因为任何子集只能包含输入的相邻元素。- 换句话说,分区将允许这样做:
(这可能源于没有有序集合概念的纯集合论。)
它们不是组合,因为输出的每个元素只使用输入集的每个成员一次。
我认为myArray.OrderedPartitions((a,b) => (a+b))
可能是一个适当简洁和解释性的。