【问题标题】:Elegant way to perform array properties comparison using Linq [closed]使用 Linq 执行数组属性比较的优雅方法 [关闭]
【发布时间】:2015-03-11 14:56:26
【问题描述】:

关于如何使用 Linq 执行以下代码的任何线索?

for (Int32 i = 0; i < array1.Count; ++i)
{
    if (!array1[i].Name.Equals(array2[i].Name, StringComparison.OrdinalIgnoreCase))
        return false;
}

【问题讨论】:

  • 为什么要用bones迭代array1array2
  • 对于初学者,请使用(for int i = ...)
  • Select + SequenceEqual
  • 这取决于索引,所以我会继续使用for-loop。

标签: c# .net linq


【解决方案1】:

可能值得仔细检查以确保array1array2 至少与bones.Count 一样长...所以

Enumerable
 .Range(0, new[] {bones.Count, array1.Length, array2.Length}.Min())
 .All(i => array1[i].Name.Equals(array2[i].Name, StringComparison.OrdinalIgnoreCase))

【讨论】:

    【解决方案2】:
    array1.All((a, i) => a.Name.Equals(array2[i].Name, StringComparer.OrdinalIgnoreCase);
    

    【讨论】:

      【解决方案3】:

      如果您想知道数组中的所有名称在同一索引处是否相等,您可以使用:

      bool allEqualNamesAtSamePosition = array1
          .Zip(array2, (arr1, arr2) => new { arr1, arr2 })
          .All(x => string.Equals(x.arr1.Name, x.arr2.Name, StringComparison.OrdinalIgnoreCase));
      

      但通常我更喜欢简单的for-loop,如果某些内容取决于索引。在我看来,LINQ 在这种情况下甚至会降低可读性。

      【讨论】:

        猜你喜欢
        • 2012-11-24
        • 1970-01-01
        • 1970-01-01
        • 2021-09-02
        • 1970-01-01
        • 2010-11-05
        • 1970-01-01
        • 2010-09-22
        • 1970-01-01
        相关资源
        最近更新 更多