比较 C# 中的多个字符串



我希望能够将多个字符串相互比较,如果它们都相等,则返回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# 级别上实际发生的情况。

相关内容

  • 没有找到相关文章