查找 if 文件名在变量名数组中不存在

本文关键字:数组 不存在 变量名 if 文件名 查找 | 更新日期: 2023-09-27 18:32:52

我有一个压缩文件列表,其中包含一个ZipArchive和压缩filename as a String。我还有一个文件名的最终列表,我需要与我的列表进行检查,如果文件与我的最终文件名列表不匹配,则应从压缩文件列表中转储它们。

我的立场可能不是最好的措辞,所以让我尝试用我的代码/伪代码进行解释。

这是我的清单:

List<ZipContents> importList = new List<ZipContents>();

它有两个参数:

  1. ZipArchive被称为ZipFile
  2. String被称为FileName

filenames是我试图检查我的ZipContents列表的文件名的结局列表。

这是我正在尝试做的事情的开始:

foreach (var import in importList)
{        
    var fn = import.FileName;
    // do some kind of lookup to see if fn would be List<String> filenames
    // If not in list dump from ZipContents
}

注释掉的部分是我不确定要做的。有人能帮助我走上正轨吗?谢谢!

编辑 1

我知道我最初没有这么说,但我认为 LINQ 将是更干净的路线。我只是不积极如何。我假设使用.RemoveAll(..)是我想走的路?

查找 if 文件名在变量名数组中不存在

反向

遍历importList,并在filenames中找不到时删除项目。 假设您没有太多项目,性能应该没问题:

for (int i = importList.Count - 1; i >= 0; i--)
{
    if (!filenames.Contains(importList[i].FileName))
    {
        importList.RemoveAt(i);
    }
}

您无法使用 foreach 从列表中删除项目,因为它会修改集合,但您可以使用我示例中的构造执行此操作。

你可以做这样的事情:

if (!filenames.Contains(fn)) {
    importList.Remove(import);
}

或者,我相信您可以使用 Linq 将此逻辑简化为一行。

编辑:

是的,您可以创建一个包含所需内容的新列表,如下所示:

var newImportList = importList.Where(il => filenames.Contains(il.FileName)).ToList();

您可以在一行中执行此操作。 只需使用 LINQ 重新建立列表:

var filenames = new List<string> {"file1", "file2"};
var zipcontents = new List<ZipContents>
{
     new ZipContents {FileName = "file1"},
     new ZipContents {FileName = "file2"},
     new ZipContents {FileName = "file3"}
};
zipcontents = zipcontents.Where(z => filenames.Contains(z.FileName)).ToList();
//zipcontents contains only files that were in 'filenames'

老实说,这就是 LINQ 的用途:查询数据。