【问题标题】:how can I take 3 string arrays(contains files) into a single array [duplicate]如何将 3 个字符串数组(包含文件)放入一个数组中 [重复]
【发布时间】:2014-01-16 17:24:45
【问题描述】:
string[] filesHD = Directory.GetFiles(dirPath, filepattern1);

string[] filesDT = Directory.GetFiles(dirPath, filepattern2);

string[] filesTD = Directory.GetFiles(dirPath, filepattern3);

我的 filesHD[] 数组包含 2 个文件。 filesDT[] 包含 2 个文件,filesTD[] 也包含 2 个文件。

我想创建一个单个字符串数组,它将包含filesHDfilesDTfilesTD 的所有 6 个文件。

string[] Allfiles = new string [filesHD + filesDT + filesTD]

【问题讨论】:

标签: c#


【解决方案1】:

有几种方法可以做到这一点,在 C# 中最简单的可能是:

var allFiles = filesHD.Union(filesDT).Union(filesTD);

var allFiles = filesHD.Concat(filesDT).Concat(filesTD);

如果您将多次枚举它,您可以通过调用.ToArray() 来结束它,如果您只是将它转到foreach 一次,请不要担心.ToArray()UnionConcat 的区别在于 Union 使用默认的相等比较器来忽略重复项。

【讨论】:

  • Concat 更好,因为Union 会删除重复项,我们不希望这样。
  • @unlimit 是的,我在回答结束时注意到了这一点。但是,它可能是用户想要的。
  • @unlimit 但如果我们谈论的是同一个文件夹中的文件,我们可能想要去除重复...
  • @nurchi 从问题来看,它看起来不像 OP 想要的那样。然而,这个答案解释了这两个选项。
【解决方案2】:

你能试试下面的代码吗?

List<string> AllFiles = new List<string>();
AllFiles.Concat(filesHD);
AllFiles.Concat(filesDT);
AllFiles.Concat(filesTD);

var strAllFiles = AllFiles.ToArray();

添加参考:Using System.Linq;

注意:没有编译器键入,无法检查语法错误。

【讨论】:

  • 仅供参考:每个阵列上的ToList 不是必需的。 Concat 接受IEnumerable&lt;T&gt;
【解决方案3】:

如果你想简单一点,你也可以尝试以下方法:

List<string> lstAllFiles=new List<string>();
lstAllFiles.AddRange(filesHD);
lstAllFiles.AddRange(filesDT);
lstAllFiles.AddRange(filesTD);
string[] strAllFiles=lstAllFiles.ToArray();

此方法不使用 Linq...
希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 2018-05-18
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    相关资源
    最近更新 更多