如何使用LINQ确保多个集合具有相同的项目数

时间:2011-03-12 19:22:31

标签: c# .net linq .net-4.0

有没有什么好方法可以确保多个集合使用LINQ具有相同的项目数?

3 个答案:

答案 0 :(得分:2)

试试这个:

bool sameLength = (collections.Select(c => c.Count())
                              .Distinct()
                              .Take(2)   // Optional (for optimization).
                              .Count()) == 1;

或:

bool sameLength = !collections.Select(c => c.Count()).Distinct().Skip(1).Any();

它的工作原理是查找每个集合的长度并跟踪唯一值。有一个不同的计数是可以的,但是如果有两个(或更多)不同的计数,则所有集合的长度不同,因此结果为假。


更新:如果集合具有不同的类型,您可以使用this answer中演示的非通用界面。

var collections = new List<ICollection> { a, b, c, d };

答案 1 :(得分:2)

检查是否

collection1.Count() == collection2.Count()

请注意这列举了该集合。如果枚举的集合很昂贵(比如LINQ2SQL)或者改变状态(更新一些数据和/或日志记录),那么使用LINQ就没有什么好办法了。

答案 2 :(得分:2)

如果您的所有馆藏都实施了ICollection界面,则可以将它们放入单List<ICollection>中,然后应用Mark的方法。

var a = new List<int>();
var b = new List<double>();
var c = new List<float>();
var d = new List<string>();

var collections = new List<ICollection> { a, b, c, d };
var sameLength = collections.Select(c => c.Count).Distinct().Count() == 1;