我解决旋转阵列的这个问题旋转阵列并得到了算法和代码工作使用LINQ语法
int[] Rotate(int[] ar,int k)
{
if (k <= 0 || k > ar.Length - 1)
return ar;
Reverse(ar, 0, k - 1);
Reverse(ar, k, ar.Length - 1);
Reverse(ar, 0, ar.Length - 1);
return ar;
}
void Reverse(int[] ar,int start, int end)
{
while (start < end)
{
int temp = ar[start];
ar[start] = ar[end];
ar[end] = temp;
start++;
end--;
}
}
现在,我想这样做在LINQ,我得到了下面的代码,我认为这是可以做得好得多。
int[] Rotate(int[] ar,int k)
{
if (k <= 0 || k > ar.Length - 1)
return ar;
int[] ar1=ar.Take(k-1).Reverse().ToArray();
int[] ar2=ar.Skip(k - 1).Take(ar.Length - k+1).Reverse().ToArray();
int[] ar3 = ar1.Concat(ar2).Reverse().ToArray();
return ar3;
}
这是编程珍珠一个众所周知的算法 - http://books.google.com/books?id=kse_7qbWbjsC&lpg=PA14&ots=DfzTzQCSar&dq=rotate%20an%20array%20programming%20pearls&pg=PA14#v=onepage&q&f=false
而在一般情况如何发展我的LINQ的技能,如果我给出一个规划问题,现在我只是想在for循环或foreach循环,如何用linq运算符来思考。我正在阅读C#4.0简而言之,除了练习任何建议吗?
这是*扩展方法*语法。 LINQ语法将从'from ...'开始。 – 2010-09-03 23:18:36
是的,但是使用LINQ来指代lambda/Enumerable ...我担心这个猫已经很好用了。 :( – 2010-09-03 23:19:29
@Marcelo Cantos,你指的是* query comprehension语法*。没有“LINQ语法”这样的东西。 – 2010-09-03 23:37:21