比较部分匹配的 2 个列表
Compare 2 lists for partial match
C# 朋友们! 我有 2 个列表要比较。
示例:
List<string> ONE contains:
A
B
C
List<string> TWO contains:
B
C
我知道我可以达到 ONE 的结果:
ONE.Except(TWO);
结果: A
How can I do the same if my Lists contain a file extension for each
Element?
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),所以我不能像原来那样删除扩展名。
感谢您的帮助!
编辑:
这就是我的处理方式,但我不确定这是 "best" 还是 "most performant" 实际解决问题的方法,但它似乎确实有效...
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
}
}
这是一个非常简单的代码,但是如果您的要求有更多的文件扩展名
List<string> lstA = new List<string>() { "A.pdf", "B.pdf", "C.pdf" };
List<string> lstB = new List<string>() { "B.txt", "C.txt" };
foreach (var item in lstA)
{
if (lstB.Contains(item.Replace(".pdf",".txt"))==false)
{
Console.WriteLine(item);
}
}
您可以实现自定义相等比较器:
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# 朋友们! 我有 2 个列表要比较。
示例:
List<string> ONE contains:
A
B
C
List<string> TWO contains:
B
C
我知道我可以达到 ONE 的结果:
ONE.Except(TWO);
结果: A
How can I do the same if my Lists contain a file extension for each Element?
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),所以我不能像原来那样删除扩展名。
感谢您的帮助!
编辑: 这就是我的处理方式,但我不确定这是 "best" 还是 "most performant" 实际解决问题的方法,但它似乎确实有效...
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
}
}
这是一个非常简单的代码,但是如果您的要求有更多的文件扩展名
List<string> lstA = new List<string>() { "A.pdf", "B.pdf", "C.pdf" };
List<string> lstB = new List<string>() { "B.txt", "C.txt" };
foreach (var item in lstA)
{
if (lstB.Contains(item.Replace(".pdf",".txt"))==false)
{
Console.WriteLine(item);
}
}
您可以实现自定义相等比较器:
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())));