DGKumar Ответов: 2

Сравнение списков в C#


Я пытаюсь сделать логическое значение истинным, если основной список не содержит вновь добавленного списка 2-х элементов.
static void Main()
       {
           List<int> toUserIds = new List<int>() { 1,3,4,5};
           List<int> fromUserIds = new List<int>() { 6,1,4,3,5};
           bool isMDNUpdated = false;
           foreach (int userID in fromUserIds)
           {
               if (toUserIds.IndexOf(userID) == -1)
               {
                   isMDNUpdated = true;
                   break;
               }
           }

           Console.WriteLine(isMDNUpdated);
           Console.Read();
       }


Что я уже пробовал:

Я попробовал использовать приведенный ниже код.
Не могли бы вы поправить меня, если этот код не соответствует действительности.
static void Main()
       {
           List<int> toUserIds = new List<int>() { 1,3,4,5};
           List<int> fromUserIds = new List<int>() { 6,1,4,3,5};
           bool isMDNUpdated = false;
           foreach (int userID in fromUserIds)
           {
               if (toUserIds.IndexOf(userID) == -1)
               {
                   isMDNUpdated = true;
                   break;
               }
           }

           Console.WriteLine(isMDNUpdated);
           Console.Read();
       }

2 Ответов

Рейтинг:
2

George Swan

Решение 1 является правильным, но нет никакой необходимости создавать экземпляр перечисляемого числа, а затем подсчитывать его. Вы можете получить ранний выход, когда обнаружите первое различие, используя Any расширение.


bool isUpdated = fromUserIds.Any(i => !toUserIds.Contains(i));


Рейтинг:
1

OriginalGriff

Что ж... вы можете сделать это в одной строке:

bool hasNew = fromUserIds.Except(toUserIds).Count() != 0;


Herman&lt;T&gt;.Instance

И Except, и Intersect являются мощными и ценными методами LINQ.