查找 if 文件名在变量名数组中不存在
本文关键字:数组 不存在 变量名 if 文件名 查找 | 更新日期: 2023-09-27 18:32:52
我有一个压缩文件列表,其中包含一个ZipArchive
和压缩filename as a String
。我还有一个文件名的最终列表,我需要与我的列表进行检查,如果文件与我的最终文件名列表不匹配,则应从压缩文件列表中转储它们。
我的立场可能不是最好的措辞,所以让我尝试用我的代码/伪代码进行解释。
这是我的清单:
List<ZipContents> importList = new List<ZipContents>();
它有两个参数:
-
ZipArchive
被称为ZipFile
-
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(..)
是我想走的路?
反向
遍历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 的用途:查询数据。