В чем разница между .Any (s => s.Contains) и .Contains? - PullRequest
2 голосов
/ 24 апреля 2020

Я понял, что в каком-то старом коде, который я написал в C#, сравнивая вхождение строки в массив, я сделал это так:

for (var i = 0; i < NounsA.Count; i++)
{
    if (NounsB.Any(s => s.Contains(NounsA[i])))
    {
        --do something--

Где NounsA и NounsB - это массивы слов.

Я только что сделал это:

for (var i = 0; i < NounsA.Count; i++)
{
    if (NounsB.Contains(NounsA[i]))
    {
        --do something--

Я сравнил их, и они возвращают разные значения, так что я спрашиваю что делает первый?

1 Ответ

2 голосов
/ 24 апреля 2020

Давайте попробуем этот код:

var NounsA = new List<string>() { "a", "b" };
var NounsB = new List<string>() { "aa", "bb" };

{
    for (var i = 0; i < NounsA.Count; i++)
    {
        if (NounsB.Any(s => s.Contains(NounsA[i])))
        {
            Console.WriteLine("!");
        }
    }
}   

{
    for (var i = 0; i < NounsA.Count; i++)
    {
        if (NounsB.Contains(NounsA[i]))
        {
            Console.WriteLine("#");
        }
    }
}

При запуске я получаю следующий вывод на консоль:

!
!

Оба блока выполняются через список NounsA, по одному элементу за раз и задают следующие вопросы соответственно:

  1. Содержит ли любая из строк в NounsB в качестве подстроки текущее значение из NounsA?
  2. Имеют ли какие-либо из строк в NounsB ровно текущее значение из NounsA?

Так что в моем примере первое совпадение дважды равно "aa" содержит "a" и "bb" содержит "b", но второе не совпадает, поскольку ни "aa", ни "bb" не равняются ни "a", ни "b".

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