使用LINQ标记两个列表的交集
我有两个列表,一个是另一个的子集使用LINQ标记两个列表的交集,linq,set,Linq,Set,我有两个列表,一个是另一个的子集 List 1: A, B, C, D, E List 2: B, D, E 我希望最终得到一个超集集合,其中包含标记的子集中的项。这似乎是LINQ可以做的事情,但我不确定语法 Result: A, false B, true C, false D, true E, true HashSet子集=新的HashSet(列表2) var query=list1 .选择(x=>new { 值=x, su
List 1: A, B, C, D, E
List 2: B, D, E
我希望最终得到一个超集集合,其中包含标记的子集中的项。这似乎是LINQ可以做的事情,但我不确定语法
Result: A, false
B, true
C, false
D, true
E, true
HashSet子集=新的HashSet(列表2)
var query=list1
.选择(x=>new
{
值=x,
subsetHas=subset.Contains(x)}
);
HashSet子集=新的HashSet(列表2)
var query=list1
.选择(x=>new
{
值=x,
subsetHas=subset.Contains(x)}
);
+1-特别是对于大型列表,对于每个项目,联接将比扫描列表2更有效。请注意,g.Any()比g.Count()>0.+1更可取-特别是对于大型列表,对于每个项目,联接将比扫描列表2更有效。请注意,g.Any()比g.Count()>0更可取。
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);
}
HashSet<char> subset = new HashSet<char>(list2)
var query = list1
.Select(x => new
{
value = x,
subsetHas = subset.Contains(x) }
);
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};
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 }));