如何在C#中检查2D数组中的所有元素是否相等

时间:2013-12-14 04:56:09

标签: c# arrays

我有一个包含最少2个,最多10个字符串的简单数组。字符串条目是固定的(WI,CT,CTRW,GF)。我需要比较这个数组的内容,看看它们是否完全相同。我的工作原理,只要阵列大小为2-3个元素。如果它包含4个或更多元素,则返回TRUE,即使不是这种情况也是如此。我还没弄明白如何解决这个问题。我理解为什么它不起作用,但不知道如何解决这个问题。有什么建议? (以下代码)

for (int i = 1; i < numLogs; i++)
{           
  if(logType[i-1] == logType[i])
  {
   return true;
   }
}

1 个答案:

答案 0 :(得分:4)

你可以使用一点Linq:

return logType.Cast<string>().Distinct().Count() == 1;
  • Cast<string>会将string[,]数组转换为IEnumerable<string>,因此您可以使用传统的Linq扩展方法。
  • Distinct获取列表中不同元素的集合。
  • Count返回上一组中的项目数。

这是一个更有效但更不容易阅读的解决方案:

return !logType.Cast<string>().Distinct().Skip(1).Any();
  • Cast<string>string[,]数组转换为IEnumerable<string>
  • Distinct获取列表中的一组不同元素。
  • Skip(1)会忽略上一组中的第一项。
  • 如果上一组中有任何项目(在跳过的项目之后),则
  • Any会返回true
  • 最后,结果被!否定了。请注意,这意味着如果输入数组为空,则该方法将返回true。

第二种解决方案更有效,因为它允许在集合中找到第二个字符串时立即返回结果,而第一个必须继续计数直到找到所有不同的项目。