如何检查数组中的所有值是否相等

时间:2014-04-28 11:13:06

标签: c# linq

以下检查字符串数组中的所有值是否相等,忽略大小写

string [] StringArray = new string[]{"xxx","xXx","Xxx"}; 
bool ValuesAreEqual = false;
for(int i= 0;i<StringArray.Length;i++)
{
    if(i>=1)
    {
        ValuesAreEqual = StringArray[0].Equals(StringArray[i],StringComparison.InvariantCultureIgnoreCase);
        if(!ValuesAreEqual)
        {
            break;
        }
    }
}

我怎么能用LINQ写这个?

4 个答案:

答案 0 :(得分:13)

如果你想知道所有是否相等Enumerable.All是否有效且可读:

string firstItem = StringArray[0];
bool allEqual = StringArray.Skip(1)
  .All(s => string.Equals(firstItem, s, StringComparison.InvariantCultureIgnoreCase));

All在第一次返回false的比较时也会中断。请注意,我使用静态string.Equals来防止null个对象上的空引用异常。

顺便说一下,你的循环是不正确的,因为你开始在索引2处比较,而不是在这里比较:

if(i > 1 ) // indices are zero based
{
    // ...
}

答案 1 :(得分:4)

string[] StringArray = new string[] {"xxx,xXx,Xxx"};
bool areEqual = StringArray.Select(s => s.ToLower()).Distinct().Count()==1;

bool areEqual = StringArray.GroupBy(s => s.ToLower()).Count() == 1;

只是在这里原创:)

答案 2 :(得分:3)

 string[] StringArray = new string[] { "xxx","xXx","Xxx" };

 var item = StringArray.FirstOrDefault();
 bool match = StringArray.Skip(1).All(i => i.ToLower() == item.ToLower());

答案 3 :(得分:2)

bool areEqual = stringArray.Any()
                  ? stringArray.All(str => str.Equals(stringArray[0], StringComparison.InvariantCultureIgnoreCase))
                  : true;