項目の配置を 2 進数として考えると、項目の数と同じ桁数のすべての 2 進数がすべての可能な組み合わせを表すことがわかります。
したがって、3 つのアイテムの場合、8 つの可能な組み合わせがあります。
000: [1,3,5], []
001: [3,5], [1]
010: [1,5], [3]
011: [5], [1,3]
100: [1,3], [1]
101: [3], [1,5]
110: [1], [3,5]
111: [], [1,3,5]
を使用して可能な組み合わせの数を計算できます1 << theArray.Length
。
以下を使用して、特定の組み合わせ (0 から可能な -1) を取得できます。
public static void GetArrays(int[] arr, int combination, out int[] arr1, out int[] arr2) {
List<int> a = new List<int>();
List<int> b = new List<int>();
foreach (int value in arr) {
if ((combination & 1) == 1) {
b.add(value);
} else {
a.add(value);
}
combination >>= 1;
}
arr1 = a.ToArray();
arr2 = b.ToArray();
}