C# 我可以使用LINQ比较两个阵列中的范围吗?
我可以滚动一个方法,伪:C# 我可以使用LINQ比较两个阵列中的范围吗?,c#,linq,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; } bool比较(IList left、int lIndex、IList right
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;
}
bool比较(IList left、int lIndex、IList right、int rIndex、int num)
{
对于(int i=0;i您可以,并且:
请注意,您应该将Compare
方法设置为泛型,并改用泛型IList
。您可以尝试此方法
int num = 3,lIndex =5,rIndex =1;
var L = (new List<int>(){1,2,3,4,5,6,7,8}).Skip(lIndex).Take(num).ToList();
var R = (new List<int>(){5,6,7,8,9}).Skip(rIndex).Take(num).ToList();
var result = L.Count() == R.Count() && !R.Except(L).Any() && !L.Except(R).Any() && string.Join(",",L).Equals(string.Join(",",R));
int num=3,lIndex=5,rIndex=1;
var L=(new List(){1,2,3,4,5,6,7,8}).Skip(lIndex).Take(num).ToList();
var R=(new List(){5,6,7,8,9}).Skip(rIndex).Take(num).ToList();
var result=L.Count()==R.Count()&&&!R.Except(L).Any()&&&!L.Except(R.Any()&&&string.Join(“,”,L).Equals(string.Join(“,”,R));
不是在编译器上,而是类似于Left.Skip(3)、Intersect(Right.Skip(1)、Take(4)).Count()==4这很好,谢谢。对我来说没关系,但这最终是分配新对象还是每个操作都会向原始对象返回某种类型的palce holder?@Mr.Boy它确实创建了实现IEnumerable
的新对象,尽管没有创建新列表。它们基本上是一个“视图”在您的原始列表中。因此我希望这比for循环有更多的开销。好的,但我们讨论的是为这种用途设计的非常轻的对象…所以我可以接受。谢谢。您应该记住,它只适用于泛型IList
,OP示例使用非泛型IList
@PavelAnikhouski my code是伪的,但感谢您指出这一点
int num = 3,lIndex =5,rIndex =1;
var L = (new List<int>(){1,2,3,4,5,6,7,8}).Skip(lIndex).Take(num).ToList();
var R = (new List<int>(){5,6,7,8,9}).Skip(rIndex).Take(num).ToList();
var result = L.Count() == R.Count() && !R.Except(L).Any() && !L.Except(R).Any() && string.Join(",",L).Equals(string.Join(",",R));