比较两个字符串列表,如果其中一项匹配,则进行一些处理

comparing two lists of string and if one of the item match do some processing

我有两个字符串列表。我想将一个列表中的每个元素与另一个列表中的每个元素进行比较,如果至少有一个匹配,则进行一些处理,否则什么都不做。

我不知道该怎么做。我确实有以下列表,我使用的代码是 SequenceEqual,但我的领导说这是错误的,因为它只是比较它是否相等,什么都不做。我不能不同意,我想实现我上面提到的预期功能。请帮忙。如您所见,顺序无关紧要,这里 123 在两个列表中但顺序不同,因此它匹配并因此根据我的要求进行一些处理。

List<string> list1 = new List<string> () { "123", "234" };

List<string> list2 = new List<string> () { "333", "234" , "123"};

您可以为此使用 Any 方法:

var matchfound = list1.Any(x=> list2.Contains(x));

现在您可以在 matchFound 上执行条件块,如果它 returns true 您可以处理任何需要的东西。

如果您想进行不区分大小写的比较,那么您将需要使用 String.Equals 并且可以指定大小写是否对比较那些无关紧要。

使用 LINQ 查找匹配项;然后检查生成的数组大小如下:

var intersect = list1.Where(el1=>list2.Any(el2=>el2==el1));
var isMatch = intersect.Count > 0;

您可以检查相交和任意

var matchFound = list1.Intersect(list2).Any();

例如,

List<string> list1 = new List<string>{ "123", "234" };
List<string> list2 = new List<string>{ "333", "234" , "123"};
var result = list1.Intersect(list2).Any();

输出True

List<string> list3 = new List<string>{"5656","8989"};
result = list1.Intersect(list3).Any();

输出False

您可以使用Intersect查找共同元素:

var intersecting = list1.Intersect(list2);

如果你只是想知道有没有共同元素追加.Any():

bool atLeastOneCommonElement = intersecting.Any();

如果你想处理它们:

foreach(var commonElement in intersecting)
{
    // do something ...
}

您需要从两个列表中取出所有匹配项,然后在找到匹配项时进行编码,例如

foreach (var item in list1.Where(x => list2.Contains(x)))
{
    //do some processing here        
    Console.WriteLine($"Match found: {item}");        
}

在上面的代码中,当 item 出现在两个列表中时,foreach 进行迭代。

输出: