我希望能够将多个字符串相互比较,如果它们都相等,则返回true
。如果任何字符串等于"N/A",则在比较中将忽略它们。例如:
string1 = "hi";
string2 = "hi";
string3 = "hi";
string4 = "N/A";
将返回true
,但是:
string1 = "hi";
string2 = "hey";
string3 = "hi";
string4 = "hi";
会返回false
.
感谢您的帮助。
if (myStrings.Where(s => s != "N/A").Distinct().Count() > 1)
假设您已将字符串存储在数组或列表等集合中,您可以使用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
会抛出异常。
演示
这个问题已经回答了,但我想我会陈述最明显的代码来做到这一点:
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;
}
}
}
这个想法相当简单。 对于第一个元素,您必须查看下一个(长度 - 1)元素。 但是,对于第二个元素,您已经将其与第一个元素进行了比较,因此您可以查看下一个(长度 - 2)元素。 你以长度结束 - 1,因为此时你要比较第二个最后一个元素和最后一个元素,这是最后可能的比较。
无论如何,上述答案要简洁/优雅得多。 这只是为了向您展示在最基本的 C# 级别上实际发生的情况。