C#学习教程:NeedtoRecursivelyGenerateEveryUniqueCombinationofanArrayofFiles这是我的问题。我正在使用C#,我有一个FileInfo[]数组,其中包含未知数量的元素。FileInfo[]files=newFileInfo[]{newFileInfo(@"C:a.jpg"),newFileInfo(@"C:b.jpg"),newFileInfo(@"C:c.jpg"),newFileInfo(@"C:d.jpg"),newFileInfo(@"C:e.jpg"),newFileInfo(@"C:f.jpg"),newFileInfo(@"C:g.jpg"),新文件信息(@"C:h.jpg"),新文件信息(@"C:i.jpg"),};//在这个例子中使用9个元素,我需要在不复制文件的情况下生成这些文件列表的所有可能的重新排序组合。因此,我的一些结果将如下所示(示例不是代码格式):a,b,c,d,e,f,g,h,ia,b,c,d,e,f,g,i,h//i&h切换a,b,c,d,e,f,h,g,i//最后3个元素切换a,a,b,b,c,c,d,d,e//THIS不被接受,因为元素是重复的等等,直到我找出所有可能的组合。所以得到的总数应该是数组中元素数量的阶乘。在这个例子中,有9个元素,所以应该有9*8*7*6*5*4*3*2*1=362,880种可能的组合。几天来我一直在搞这个,我无法解决它。任何帮助表示赞赏,尤其是代码示例!谢谢!Linq很简单:IEnumerablepermutations=fromainfilesfrombinfiles.Except(new[]{a})fromcinfiles.Except(new[]{a,b})fromdinfiles.Except(new[]{a,b,c})来自文件中的e。Except(new[]{a,b,c,d})fromfinfiles.Except(new[]{a,b,c,d,e})fromginfiles.Except(new[]{a,b,c,d,e,f})fromhinfiles.Except(new[]{a,b,c,d,e,f,g})fromiinfiles.除了(新[]{a,b,c,d,e,f,g,h})选择新[]{a,b,c,d,e,f,g,h,i};编辑:这是适用于任意数量项目的通用解决方案:for(inti=0;i是这样使用的:IEnumerable>permutations=files.GetPermutations(9);(这个解决方案的灵感来自EricLippert关于笛卡尔乘积的文章。)编辑2:这是使用Aggregate的变体:returnEnumerable.Repeat(source,count).Aggregate(seed,(accumulator,sequence)=>fromaccinaccumulatorfromiteminsequence.Except(acc)选择acc.Concat(new[]{item}));这里有各种可用的算法。以下页面列出了3个不同的页面:计算并列出所有排列您确实想要聚合所有排列。编辑:这是您所谈论的示例:http://www.codeproject.com/KB/recipes/Premutations.aspx以上是C#学习教程的全部内容:需要递归生成数组的每个唯一组合文件分享,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
