我解決旋轉陣列的這個問題旋轉陣列並得到了算法和代碼工作使用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