c# - 比较 2 个列表的部分匹配
问题描述
C# 伙计们! 我有 2 个要比较的列表。
示例:
List<string> ONE contains:
A
B
C
List<string> TWO contains:
B
C
我知道如果我这样做,我可以达到 ONE 的结果:
ONE.Except(TWO);
结果:一个
如果我的列表包含每个元素的文件扩展名,我该怎么做?
List<string> ONE contains:
A.pdf
B.pdf
C.pdf
List<string> TWO contains: (will always have .txt extension)
B.txt
C.txt
结果应该= A.pdf
我意识到我需要在最后的报告中显示完整的文件名(A.pdf),所以我不能像原来那样去掉扩展名。
谢谢您的帮助!
编辑:这就是我的处理方式,但我不确定这是否是实际解决它的“最佳”或“最高性能”方法,但它似乎确实有效......
foreach (string s in ONE)
{
//since I know TWO will always be .txt
string temp = Path.GetFileNameWithoutExtension(s) + ".txt";
if (TWO.Contains(temp))
{
// yes it exists, do something
}
else
{
// no it does not exist, do something
}
}
解决方案
您可以实现自定义相等比较器:
class FileNameComparer: IEqualityComparer<String>
{
public bool Equals(String b1, String b2)
{
return Path.GetFileNameWithoutExtension(b1).Equals(Path.GetFileNameWithoutExtension(b2));
}
public int GetHashCode(String a)
{
return Path.GetFileNameWithoutExtension(a).GetHashCode();
}
}
...并将其传递给 except 方法:
System.Console.WriteLine(string.Join(", ", list1.Except(list2, new FileNameComparer())));
推荐阅读
- c - printf 的示例直到换行才刷新
- git - 在没有访问原始仓库的情况下检测两个 git diff 之间的合并冲突
- java - Spring Boot MockMVC 在单元测试时返回空体,状态码为 200
- c# - 最大化 OpenTK 窗口不会调整显示对象的大小
- javascript - JavaScript:更改给定路径的深度嵌套对象的所有值
- javascript - 复制锚元素的文本
- java - Spring API 返回一个文件而不是字符串
- mongodb - Mongodump - 执行转储时找不到命令
- java - Jackson objectMapper 无法读取 UTF-8
- javascript - 有没有办法确保在 JavaScript 中的函数上调用 await ?