查找两个或更多列表中存在的数字列表的语法是什么?当我只需要检查两个列表时,我正在循环播放,但现在我需要做几个... 像
这样的东西public class Box extends Shape
{
public function Box(width:Number = 100, height:Number = 100, color:uint = 0)
{
graphics.beginFill(color)
graphics.drawRect(0, 0, width, height);
graphics.endFill();
}
}
答案 0 :(得分:3)
如果要查找列表 all 中存在的一组数字,那么Enumerable.Intersect
是一种很好的方法。您甚至不必硬编码列表集合,它可以在运行时创建:
var lists = new[] { list1, list2, ..., listN }; // dynamically specified
var common = lists.First().AsEnumerable();
foreach (var list in lists.Skip(1))
{
common = common.Intersect(list);
}
// and now common has the result, e.g.
var listOfCommonEntries = common.ToList();
如果你想找到包含列表1和列表2之间所有公共数字的集合,请将列表1和列表N之间的所有公共数字联合起来,那么它会有所不同:
var common = Enumerable.Empty<int>();
foreach (var list in lists.Skip(1))
{
common = common.Union(lists.First().Intersect(list));
}
答案 1 :(得分:2)
您可以使用Enumerable.Intersect
:
List<int> commonIds = list1.Intersect(list2.Intersect(list3)).ToList();
它非常高效,因为它使用了一套。
答案 2 :(得分:1)
这是一个函数,
它返回所有2个组合的交集的并集。
public static IEnumerable<T> SharedItems<T>(this IEnumerable<IEnumerable<T>> source)
{
var pairs =
from s1 in source
from s2 in source
select new { s1 , s2 };
var intersects = pairs
.Where(p => p.s1 != p.s2)
.Select(p => p.s1.Intersect(p.s2));
return intersects.SelectMany(i => i).Distinct();
}
答案 3 :(得分:-1)
自定义
void Main()
{
List<int> one = new List<int>() {1, 3, 4, 6, 7};
List<int> second = new List<int>() {1, 2, 4, 5};
foreach(int r in one.Intersect(second))
Console.WriteLine(r);
}