【发布时间】:2011-07-13 15:24:40
【问题描述】:
我有一个清单:
{string, string, string, string}
我需要检查此列表中的所有项目是否相同然后返回true,如果不返回false。
我可以用 LINQ 做到这一点吗?
【问题讨论】:
我有一个清单:
{string, string, string, string}
我需要检查此列表中的所有项目是否相同然后返回true,如果不返回false。
我可以用 LINQ 做到这一点吗?
【问题讨论】:
var allAreSame = list.All(x => x == list.First());
【讨论】:
list.First() 在每次迭代中都如此有效地被遍历两次?
list 只是一个物化集合,如列表或数组:由于list.First 返回第一个元素,它不会遍历列表,所以:不,列表只遍历一次。然而,更笼统地说,你是对的:如果list 是一个非物化可枚举,那么每次调用First 都需要执行所有代码(例如访问数据库或执行复杂的 Where 或 OrderBy 语句)才能获得至少是第一个元素。在这种情况下,最好调用一次list.First 并存储结果
var allAreSame = list.Distinct().Count() == 1;
或者更优化一点
var allAreSame = list.Count == 0 || list.All(x => x == list[0]);
【讨论】:
list.Distinct().Count() == 1; 与 list.All(current => current == list.First())。
这个怎么样:
string[] s = { "same", "same", "same" };
if (s.Where(x => x == s[0]).Count() == s.Length)
{
return true;
}
【讨论】:
var hasIdenticalItems = list.Count() <= 1 || list.Distinct().Count() == 1;
【讨论】: