检查数组是否包含另一个数组的值

时间:2017-11-08 11:54:57

标签: c# arrays

我有两个列表,如果它包含列表2中的任何值,我想要列表1的值。

List<string> list1 = new List<string>();
list1.Add("Sunday is far away");
list1.Add("Today is Monday");
list1.Add("Tuesday is too near");

List<string> list2 = new List<string>();
list2.Add("Sunday");
list2.Add("Monday");
list2.Add("Tuesday");

var result1 = list1.Where(x => list2.Any(y => y.Contains(x))).ToList(); //no results
var result2 = list2.Where(x => list1.Any(y => y.Contains(x))).ToList(); //give values of list2. But I need values of list1

更新

我需要结果中list1的值,我该怎么做?

2 个答案:

答案 0 :(得分:1)

你错过了简单的事情,看看集合,第一个列表中的所有项目都大于第二个列表中的所有项目,因此包含将返回false。因此,您必须首先检查第二项,如下所示:

这是您的modified code with result

var result1 = list1.Where(x => list2.Any(y => x.Contains(y))).ToList(); 
var result2 = list2.Where(x => list1.Any(y => y.Contains(x))).ToList(); 

答案 1 :(得分:0)

你可以。如果List1包含List2的任何值,则result = List1。否则为null;

var result = list2.Any(l2 => list1.Contains(l2))==true?list1:null;