以下检查字符串数组中的所有值是否相等,忽略大小写
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写这个?
答案 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;