需要递归生成文件数组的每个唯一组合

2024-03-10

我研究并发现LOTS类似的请求,但没有什么是我所需要的。

这是我的问题。我正在使用 C# 工作,并且有一个 FileInfo[] 数组,其中包含未知数量的元素。

FileInfo[] files = new FileInfo[]
{
    new FileInfo(@"C:\a.jpg"),
    new FileInfo(@"C:\b.jpg"),
    new FileInfo(@"C:\c.jpg"),
    new FileInfo(@"C:\d.jpg"),
    new FileInfo(@"C:\e.jpg"),
    new FileInfo(@"C:\f.jpg"),
    new FileInfo(@"C:\g.jpg"),
    new FileInfo(@"C:\h.jpg"),
    new FileInfo(@"C:\i.jpg"),
}; // Using 9 elements for this example

我需要生成这些文件的每种可能的重新排序组合的列表,而不重复这些文件。

所以,我的一些结果将是这样的(示例不是代码格式):

a, b, c, d, e, f, g, h, i
a, b, c, d, e, f, g, i, h // i & h switched
a, b, c, d, e, f, h, g, i // last 3 elements switched

a, a, b, b, c, c, d, d, e // THIS IS NOT ACCEPTED, because elements are duplicated

依此类推,直到我想出所有可能的组合

因此结果总数应该是数组中元素数量的阶乘。在这个例子中,有9个元素,所以应该有9*8*7*6*5*4*3*2*1=362,880种可能的组合。

我已经把这个问题搞乱了好几天了,但我就是无法集中注意力。感谢任何帮助,尤其是代码示例!

Thanks!


使用 Linq 即可轻松实现:

IEnumerable<FileInfo[]> permutations =
    from a in files
    from b in files.Except(new[] { a })
    from c in files.Except(new[] { a, b })
    from d in files.Except(new[] { a, b, c })
    from e in files.Except(new[] { a, b, c, d })
    from f in files.Except(new[] { a, b, c, d, e })
    from g in files.Except(new[] { a, b, c, d, e, f })
    from h in files.Except(new[] { a, b, c, d, e, f, g })
    from i in files.Except(new[] { a, b, c, d, e, f, g, h })
    select new[] { a, b, c, d, e, f, g, h, i };

EDIT:

这是适用于任意数量的项目的通用解决方案:

static class ExtensionMethods
{
    public static IEnumerable<IEnumerable<T>> GetPermutations<T>(this IEnumerable<T> source, int count)
    {
        IEnumerable<IEnumerable<T>> result = new[] { Enumerable.Empty<T>() }; 
        for (int i = 0; i < count; i++)
        {
            result =  
                from seq in result 
                from item in source.Except(seq)
                select seq.Concat(new[] { item }); 
        } 
        return result;
    }
}

使用方法如下:

IEnumerable<IEnumerable<FileInfo>> permutations = files.GetPermutations(9);

(这个解决方案的灵感来自Eric Lippert 关于笛卡尔积的文章 http://blogs.msdn.com/b/ericlippert/archive/2010/06/28/computing-a-cartesian-product-with-linq.aspx.)


EDIT 2:

这是一个使用的变体Aggregate:

static class ExtensionMethods
{
    public static IEnumerable<IEnumerable<T>> GetPermutations2<T>(this IEnumerable<T> source, int count)
    {
        IEnumerable<IEnumerable<T>> seed = new[] { Enumerable.Empty<T>() }; 
        return Enumerable.Repeat(source, count)
            .Aggregate(
                seed,
                (accumulator, sequence) =>
                    from acc in accumulator
                    from item in sequence.Except(acc)
                    select acc.Concat(new[] { item }));
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

需要递归生成文件数组的每个唯一组合 的相关文章

  • 如何在文本集中创建所有字符组合?

    例如 我有这样的文本集 第 1 栏 a b 第 2 栏 l m n 第 3 栏 v w x y 我想将它们组合起来以获得如下输出 alv alw alx aly amv amw amx amy 这将输出 24 种文本组合 如果我只使用前两列
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 以编程方式在java的resources/source文件夹中创建文件?

    我有两个资源文件夹 src 这是我的 java 文件 资源 这是我的资源文件 图像 properties 组织在文件夹 包 中 有没有办法以编程方式在该资源文件夹中添加另一个 properties 文件 我尝试过这样的事情 public s
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • 使用 JSoup 解析 Html

    我正在尝试解析以下 URL 的 html http ocw mit edu courses aeronautics and astronautics 16 050 Thermal energy fall 2002 http ocw mit
  • 使用 DllImport 调用 C++ 函数

    这是基本的 如何从 C DllImport 调用下面的函数 SubscribeNewsFeed class LogAppender public L Append public LogAppender outfile TestLog txt
  • 如何声明二维字符串数组?

    string Tablero new string 3 3 我需要有一个 3x3 数组排列来保存信息 我如何在 C 中声明它 string Tablero new string 3 3 您还可以使用数组初始值设定项语法在同一行中实例化它 如
  • 如何强制 Gradle 重新下载依赖项?

    如何告诉 Gradle 从存储库重新下载依赖项 通常 您可以使用命令行选项刷新缓存中的依赖项 刷新依赖项 https docs gradle org current userguide dependency management html
  • JAGS 中缺少预测数据模型

    我正在尝试在 JAGS 中编写最简单的缺失数据模型 一个预测变量 有一些缺失的数据点 和一个结果变量 我知道这个例子不是最有用或最现实的 但它可以帮助我在继续处理更复杂的缺失预测数据场景之前解决模型问题 模型和数据如下 但这是编译错误 Er
  • 动态 UILabel 大小 iOS 7 问题

    我正在尝试根据文本高度动态调整标签大小 UILabel 中的高度可以从 0 行到多行不等 我已经为这个问题提出了一个解决方案 该解决方案在 iOS 8 上运行良好 但在 iOS 7 1 上失败 我也试图支持它 该项目中未使用自动布局 所有约
  • 有限字符池中不存在重复字符的正则表达式

    有没有办法编写正则表达式来匹配仅包含某些字符的字符串 并且从不重复这些字符 我已经使用一组代码编写了一些代码来实现此目的 但想知道是否有正则表达式的方法可以做到这一点 例如 如果我只想要一个包含 A B C 的字符串 并且我想匹配一个从不重
  • 如何弃用 Protocol Buffers 中的整个消息?

    根据文档 https developers google com protocol buffers docs proto 已弃用 字段选项 如果设置为 true 则表示该字段已弃用 并且不应由新代码使用 使用示例 message Foo s
  • sqlalchemy 中 sql LIKE 的反向版本[重复]

    这个问题在这里已经有答案了 我所说的 类似的反向版本 是指完全一样这个问题 https stackoverflow com questions 472063 mysql what is a reverse version of like 问
  • django haystack 自定义表单

    我正在尝试使用 django haystack 制作自定义搜索表单 我只是从 haystack 的文档中进行修改 forms py from django import forms from haystack forms import Se
  • geom_smooth() - 缩放 y 轴,因平滑而丢失数据

    抱歉 这个例子不是那么好 但它确实强调了这一点 mtcars tran lt factor mtcars am labels c Man Aut ggplot mtcars aes x hp y mpg group tran geom sm
  • 静态 const 成员初始化中的 sizeof

    我有这样的代码 class A public unsigned long a static const unsigned long b sizeof a error C2327 A a is not a type name static o
  • Ruby on Rails Collection select - 如何预先选择正确的值?

    我花了过去三天的时间为我的 列表 表单收集 选择表单助手 用户可以在其中选择一个类别 我希望将当前在listing category id 中设置的类别作为预选值 我的视图代码如下所示 我知道这是不正确的 但即使阅读 Shiningthro
  • iOS 6.0:UISplitViewController Popover 损坏或 Apple 更改了设计?

    我在 Xcode 4 5 和部署目标 5 1 中创建了一个带有主详细信息模板的项目 有人可以帮我解决以下 UISplitViewController 问题吗 在纵向模式下 主视图从左侧淡入 它不像 iOS 5 0 中的纵向模式那样显示为 P
  • Linux命令检查文件系统中的新文件

    我们有一台 Linux 机器 我们想检查在某个日期范围内添加了哪些新文件 我只能通过 SSH 访问此机器 它是 openSUSE 11 1 是否有某种命令可以为我提供在 04 05 2011 和 05 05 2011 之间添加到文件系统的文
  • Python - ValueError:未知区域设置:UTF-8 [重复]

    这个问题在这里已经有答案了 我运行包含 Pandas 导致问题的那个 库的 python 脚本 我收到此错误 Traceback most recent call last File test py line 2 in
  • 如何将新列添加到数据框(到前端而不是末尾)?

    如何向现有数据框添加新变量 但我想添加到前端而不是末尾 例如 我的数据框是 b c d 1 2 3 1 2 3 1 2 3 我想添加一个新变量 a 所以数据框看起来像 a b c d 0 1 2 3 0 1 2 3 0 1 2 3 Use
  • GWT Maven 插件每次都会重新编译

    我在我的 GWT 项目中使用 GWT Maven 插件 问题是 如果任何类发生更改 即使它是服务器类 GWT Maven 插件也会在运行时重新编译所有 GWT 代码mvn package 这个插件如何判断是否需要重新编译 我怎样才能让它变得
  • 从命令行覆盖 pom pluginManagement 中定义的 Maven 插件配置

    我的项目继承的POM包含一些
  • 需要递归生成文件数组的每个唯一组合

    我研究并发现LOTS类似的请求 但没有什么是我所需要的 这是我的问题 我正在使用 C 工作 并且有一个 FileInfo 数组 其中包含未知数量的元素 FileInfo files new FileInfo new FileInfo C a