我可以使用 LINQ 来比较两个数组中的范围吗?

Mr.*_*Boy 2 c# linq

我可以推出一个方法,伪:

bool Compare(IList left, int lIndex, IList right, int rIndex, int num)
{
  for(int i=0;i<num;++i)
  {
   if(left[lIndex+i] != right[rIndex+i])
   {
    return false;
   }
  }
  return true;
} 
Run Code Online (Sandbox Code Playgroud)

所以给出L =[1,2,3,4,5,6,7,8]R = [5,6,7,8,9]Compare(L,5,R,1,3) == true

我觉得我应该能够做一个简单的 LINQ 版本,但我不确定如何处理索引。它可以写成一个简单的 LINQ/lambda 吗...否则我会把它作为一个实用方法。


顺便说一下,有一个标题非常相似的问题,但它提出了不同的问题:https : //stackoverflow.com/questions/33812323/compare-two-arrays-using-linq

Swe*_*per 7

你可以SkipTakeSequenceEqual

return left.Skip(lIndex).Take(num).SequenceEqual(
        right.Skip(rIndex).Take(num))
Run Code Online (Sandbox Code Playgroud)

请注意,您应该使您的Compare方法泛型并使用泛型IList<T>代替。

  • @Mr.Boy它确实创建了实现“IEnumerable”的新对象,尽管没有创建新列表。它们基本上是您原始列表上的“视图”。所以我预计这会比 for 循环有更多的开销。 (2认同)