获取数组中特定长度的所有子数组

时间:2013-04-16 17:45:15

标签: c# arrays subset

我想要帮助在C#中获取数组的子集。 所有其他例子对我帮助不大。

我想得到一个特定大小的数组的所有子集。

例如,如果输入数组是{1,2,3,4}并且我想要所有大小为3的子集, 必须返回所有唯一子集{1,2,3},{1,2,4},{2,3,4},{1,3,4}。

我是C#的新手,非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

查看这篇文章。这将通过各种编程语言中的示例进行详细描述。我觉得不需要复制其他解决方案,所以我会把它作为一个链接供你从许多应该帮助你的例子中选择

Algorithm to return all combinations of k elements from n

答案 1 :(得分:0)

听起来很像家庭作业......

因为我假设大小是可变的,所以你需要使用递归。类似的东西:

    static void Main(string[] args)
    {
        int[] originalList = new int[] { 1, 2, 3, 4 };
        Stack<int> currentList = new Stack<int>();
        List<int[]> listOfSubsets = new List<int[]>();

        BuildListOfSubsets(originalList, listOfSubsets, 3, 0, currentList);
    }

    private static void BuildListOfSubsets(int[] originalList, List<int[]> listOfSubsets, int sizeOfSubsetList, int currentLevel, Stack<int> currentList)
    {
        if (currentList.Count == sizeOfSubsetList)
        {
            int[] copy = new int[sizeOfSubsetList];
            currentList.CopyTo(copy, 0);
            listOfSubsets.Add(copy);
        }
        else
            for (int ix = currentLevel; ix < originalList.Length; ix++)
            {
                currentList.Push(originalList[ix]);
                BuildListOfSubsets(originalList, listOfSubsets, sizeOfSubsetList, ix + 1, currentList);
                currentList.Pop();
            }
    }

结果将在listOfSubsets列表中。看看你是否能找到优化以尽早离开for循环。