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

时间:2019-01-11 13:26:04

标签: c# c#-4.0 foreach compare string-comparison

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

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

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

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

5 个答案:

答案 0 :(得分:4)

您可以使用Any方法:

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

现在,您可以在matchFound上执行条件阻止,如果它返回true,则可以处理所需的任何内容。

如果要进行大小写直接比较,则需要使用String.Equals并可以指定大小写是否适合与它们进行比较。

答案 1 :(得分:3)

您可以使用Intersect查找常见元素:

var intersecting = list1.Intersect(list2);

如果您只是想知道是否存在公共元素,请在.Any()后面加上

bool atLeastOneCommonElement = intersecting.Any();

如果要处理它们:

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

答案 2 :(得分:1)

您可以检查“相交”和“任意”

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

答案 3 :(得分:1)

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

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

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

输出:

enter image description here

答案 4 :(得分:0)

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

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