0

我希望能够相互比较多个字符串,true如果它们都相等则返回。如果任何字符串等于“N/A”,那么它们将在比较中被忽略。例如:

string1 = "hi";
string2 = "hi";
string3 = "hi";
string4 = "N/A";

会返回true,但是:

string1 = "hi";
string2 = "hey";
string3 = "hi";
string4 = "hi";

会回来false的。

谢谢你的帮助。

4

3 回答 3

6
if (myStrings.Where(s => s != "N/A").Distinct().Count() > 1)
于 2012-12-03T23:05:58.707 回答
3

假设您已将字符串存储在数组或列表等集合中,您可以使用Enumerable.All

string first = strings.FirstOrDefault(s => s != "N/A");
bool allEqual = first == null ||  strings.All(s => s == "N/A" || s == first);

说明:您可以将所有字符串与您选择的一个(我选择第一个)进行比较,如果一个不同allEqual必须是假的。我需要使用FirstOrDefault,因为可能所有字符串都是“N/A”或列表为空,然后First会抛出异常。

演示

于 2012-12-03T23:08:00.803 回答
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) 个元素。您以 length - 1 结尾,因为此时您将比较倒数第二个和最后一个元素,这是最后可能的比较。

无论如何,上述答案要简洁/优雅得多。这只是为了向您展示在最基本的 C# 级别上实际发生的情况。

于 2012-12-03T23:47:07.767 回答