Отметить пересечение двух списков с помощью LINQ - PullRequest
1 голос
/ 20 июля 2009

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

List 1: A, B, C, D, E
List 2: B, D, E

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

Result: A, false
        B, true
        C, false
        D, true
        E, true

Ответы [ 4 ]

3 голосов
/ 20 июля 2009
var list1 = new string[] {"A", "B", "C", "D", "E"};
var list2 = new string[] { "B", "D", "E"};

var query = from item1 in list1
            join item2 in list2 on item1 equals item2 into g
            select new { Name = item1, IsFound = g.Count() > 0};
3 голосов
/ 20 июля 2009
var list1 = new string[]{ "A", "B", "C", "D", "E" };
var list2 = new string[]{ "B", "D", "E" };
var result =
from a in list1
select new { Value = a, Has = list2.Contains( a ) };

foreach(var item in result ) {
    Console.WriteLine(string.Format("{0}, {1}", item.Value, item.Has);
}
1 голос
/ 20 июля 2009
HashSet<char> subset = new HashSet<char>(list2)

var query = list1
  .Select(x => new
  {
    value = x,
    subsetHas = subset.Contains(x) }
  );
0 голосов
/ 21 июля 2009
var list1 = new[] { "A", "B", "C", "D", "E" };
var list2 = new[] { "B", "D", "E" };
var result =
    list1.Intersect(list2)
         .Select(el => new { el, true })
         .Union(list1.Except(list2)
                     .Select(el => new { el, false }));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...