Сравнение двух списков строк и, если один из элементов соответствует - PullRequest
0 голосов
/ 11 января 2019

У меня есть два списка строк. Я хочу сравнить каждый элемент в одном списке с другим и, если хотя бы один из них совпадает, выполнить некоторую обработку, иначе ничего не делать.

Я не знаю, как это сделать. У меня есть следующие списки, и код, который я использовал, был SequenceEqual, но мой руководитель сказал, что это неправильно, поскольку он просто сравнивает, равен он или нет, и ничего не делает. Я не мог не согласиться, и я хочу достичь желаемой функциональности, о которой я говорил выше. Пожалуйста помоги. Как вам кажется, порядок не имеет значения, здесь 123 находится в обоих списках, но в другом порядке, поэтому он соответствует и, следовательно, выполняет некоторую обработку согласно моему требованию.

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

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

Ответы [ 5 ]

0 голосов
/ 11 января 2019

Вам нужно взять все эти элементы, которые совпадают, из обоих списков, а затем сделать код, если совпадение найдено, например

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

0 голосов
/ 11 января 2019

Вы можете использовать Intersect, чтобы найти общие элементы:

var intersecting = list1.Intersect(list2);

Если вы просто хотите узнать, есть ли общие элементы, добавьте .Any():

bool atLeastOneCommonElement = intersecting.Any();

Если вы хотите обработать их:

foreach(var commonElement in intersecting)
{
    // do something ...
}
0 голосов
/ 11 января 2019

Используйте LINQ, чтобы найти совпадения; и затем проверьте полученный размер массива следующим образом:

var intersect = list1.Where(el1=>list2.Any(el2=>el2==el1));
var isMatch = intersect.Count > 0;
0 голосов
/ 11 января 2019

Вы можете проверить с помощью Intersect и Any

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

0 голосов
/ 11 января 2019

Для этого можно использовать метод Any:

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

Теперь вы можете сделать условный блок на matchFound, если он вернет true, вы можете обработать то, что когда-либо потребуется.

если вы хотите выполнить сравнение без учета регистра, вам нужно будет использовать String.Equals и указать, если регистр не имеет значения для сопоставления этих символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...