C#如何检查列表中的所有字符串是否相同?

4
可能重复:

可能重复:
检查列表中的所有项目是否相同

我有一个列表:

{string, string, string, string}

我需要检查此列表中的所有项是否相同,如果相同则返回true,否则返回false。
我可以使用LINQ吗?
4个回答

22
var allAreSame = list.All(x => x == list.First());

1
除了在每次迭代中调用list.First(),因此实际上列表被遍历两次? - David Clarke
@DavidClarke:假设这是 LINQ 到对象,list 只是一个已经实例化的集合,比如列表或数组:由于 list.First 返回的是第一个元素,它不会遍历整个列表,因此:不,列表只被遍历一次。更一般地说,你是正确的:如果 list 是一个未实例化的可枚举对象,每次调用 First 都需要执行所有的代码(例如访问数据库或执行复杂的 Where 或 OrderBy 语句)才能得到至少第一个元素。在这种情况下,最好调用 list.First 一次并存储结果。 - Daniel Hilgarth

3
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()),至少从可读性的角度来看。 - Arman

1
这样怎么样:
    string[] s = { "same", "same", "same" };
    if (s.Where(x => x == s[0]).Count() == s.Length)
    {
        return true;
    }

这是一个lambda表达式吗? - Matthis Kohli

0
var hasIdenticalItems = list.Count() <= 1 || list.Distinct().Count() == 1;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接