2009-07-20 10 views
1

私は2つのリストを持っています.1つは、もう一方のサブセットです。LINQを使用した2つのリストのフラグの共通部分

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

私は、サブセットに含まれているアイテムのスーパーセットの単一のコレクションで終了したいと思います。これはLINQができるようなものだと思われますが、構文についてはわかりません。

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

答えて

3
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
HashSet<char> subset = new HashSet<char>(list2) 

var query = list1 
    .Select(x => new 
    { 
    value = x, 
    subsetHas = subset.Contains(x) } 
); 
3
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}; 
+1

+1 - 特に大規模なリストのために、参加する各項目にLIST2をスキャンするよりも効率的であろう。 g.Any()はg.Count()> 0よりも優先されることに注意してください。 – dahlbyk

0
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 })); 
関連する問題