Получите разные и общие элементы в двух массивах с LINQ

Например, у меня есть два массива:

var list1 = string[] {"1", "2", "3", "4", "5", "6"};
var list2 = string[] {"2", "3", "4"};

Я пытаюсь сделать это -

  1. Получайте общие элементы из list1 и list2 (например, {"2", "3", "4"})
  2. Получите разные элементы list1 и list2 (например, {"1", "5", "6"})

Поэтому я попытался с LINQ и -

var listDiff = list1.Except(list2); //This gets the desire result for different items

Но,

var listCommon = list1.Intersect(list2); //This doesn't give me desire result. Comes out as {"1", "5", "6", "2", "3", "4"};

Есть идеи?

Ответ 1

Как-то вы получили этот результат из другого места. (Возможно, вы сначала listDIff содержимое listDIff и подумали, что это из listCommon.) Метод Intersect предоставляет вам элементы, которые существуют в обоих списках:

var list1 = new string[] {"1", "2", "3", "4", "5", "6"};
var list2 = new string[] {"2", "3", "4"};
var listCommon = list1.Intersect(list2);
foreach (string s in listCommon) Console.WriteLine(s);

Вывод:

2
3
4