我希望能够将多个字符串相互比较,如果它们全部相等则返回true
。如果任何字符串等于“N / A”,则在比较中将忽略它们。例如:
string1 = "hi";
string2 = "hi";
string3 = "hi";
string4 = "N/A";
会返回true
,但是:
string1 = "hi";
string2 = "hey";
string3 = "hi";
string4 = "hi";
会返回false
。
感谢您的帮助。
答案 0 :(得分:6)
if (myStrings.Where(s => s != "N/A").Distinct().Count() > 1)
答案 1 :(得分:3)
假设您已将字符串存储在数组或列表之类的集合中,则可以使用Enumerable.All
:
string first = strings.FirstOrDefault(s => s != "N/A");
bool allEqual = first == null || strings.All(s => s == "N/A" || s == first);
解释:您可以将所有字符串与您选择的字符串进行比较(我采用第一个字符串),如果不同,则allEqual
必须为false。我需要使用FirstOrDefault
,因为所有字符串都可能是“N / A”或列表为空,然后First
会抛出异常。
答案 2 :(得分:0)
问题已经回答,但我想我会说明最明显的代码:
bool notEqual = false;
for (int i = 0; i < list.Count - 1; i++) {
for (int j = i + 1; j < list.Count; j++) {
if (!(list[i].Equals(list[j])) {
notEqual = true;
break;
}
}
}
这个想法很简单。使用第一个元素,您必须查看下一个(length - 1)元素。但是,对于第二个元素,您已经将它与第一个元素进行了比较,因此您可以查看下一个(length - 2)元素。你的结尾是长度 - 1,因为那时你要比较倒数第二个和最后一个元素,这是最后可能的比较。
无论如何,上述答案更加简洁/优雅。这只是为了向您展示在最基本的C#-wise方面实际发生的事情。