Linq сравнивает 2 строковых массива, когда оба имеют одинаковые значения

#c# #linq

#c# #linq

Вопрос:

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

         string x = "CA ,WA";
        string y = "CA,WA,NY";
        var srcDetails = x.ToLower().Replace(" ", string.Empty).Split(',');
        var dstDetails = y.ToLower().Replace(" ", string.Empty).Split(',');

        var common = dstDetails.Intersect(srcDetails); //common in x,y

        var destGreaterSrc= dstDetails.Except(srcDetails); //if y > x

        var extraInDest = dstDetails.Except(common); 
  

extraInDest — это дополнительное значение в y, которого нет в x

В приведенном выше коде дополнительные значения в dest, которые выводятся как NY.

Я пытаюсь найти сценарий, в котором значения x могут быть не равны y, например

     string x = "CA ,NV";
    string y = "CA,WA,NY";
  

как мы можем сделать вывод var extraInDest равным false.

например, var extraInDest = dstDetails .За исключением (общего) результата false или null

Комментарии:

1. Будет ли ваша строка всегда в формате CSV?

2. Всегда разделяется запятой.

3. строка x = «CA,WA»; строка y = «CA,WA,NY»; var srcDetails = x.Split(‘,’); var dstDetails = y.Split(‘,’); var extraInSrc = srcDetails . Где(s => !dstDetails. Выберите(d => d.Trim() . ToLower()) . Содержит(s.Trim() . ToLower())) . ToList(); if (extraInSrc.Count() <= 0) // Если все значения X присутствуют в Y { var extraInDst = dstDetails . Где(s => !srcDetails. Выберите(d => d.Trim() . ToLower()) . Содержит(s.Trim() . ToLower())) . ToList(); }

4. очень интересный блок кода kashi.

Ответ №1:

Самым простым было бы

 var extraInDest = srcDetails.Except(dstDetails).Any()
    ? null 
    : dstDetails.Except(srcDetails);
  

Комментарии:

1. @Kurkula так это вам помогло?

Ответ №2:

Это должно быть просто, если ваше сравнение всегда должно приводить к логическому значению, вы должны использовать это вместо

 bool extraInDest = srcDetails.All(v=>dstDetails.Contains(v));