2010-05-17 50 views
6

在C#中獲取數組尾部的最簡單方法是什麼?除了第一個元素。獲取數組的尾部

+1

有你的問題的多種解釋:你要的數組的副本元素?你想迭代原始數組,跳過第一個? – 2010-05-17 04:03:58

回答

13
var myArray = GetSomeArray(); 
myArray = myArray.Skip(1).ToArray(); 

注意,我會避免調用.ToArray()儘可能並堅持在.NET中使用IEnumerable<T>代替。

+3

但是......如果你打算像上面那樣調用ToArray,那麼使用Array.Copy可能會更有效率,因爲我不相信ToArray將會知道足夠的輸入來初始化數組長度爲-1。 – Josh 2010-05-17 04:11:20

+1

@Josh:這是真的(我假設'ToArray'可以通過在內部建立一個'List'並在*上調用'ToArray')來工作,但是如果你只是簡單地不調用'ToArray'會更好沒必要。 – 2010-05-17 04:17:22

6

Array.Copy

var array1 = new int[] { 1, 2, 3, 4, 5, 6 }; 

var array2 = new int[array1.Length - 1]; 
Array.Copy(array1, 1, array2, 0, array2.Length); 

// array2 now contains {2, 3, 4, 5, 6} 

編輯:喬爾Coehoorn的答案是更好,因爲它意味着你可以完全避免使用數組!

1

哈哈叫我老學校,但嘿其有效!

for(int i = 1; i<array.length;i++) 
{ 
    array2[i-1]=array[i]; 
} 

:P

,或者你可以得到他們,如果他們是在一個方法,你只需要打電話給他們,只是取決於你想用尾巴做什麼。

for(int i = 1; i<array.length;i++) 
{ 
    yield return array[i]; 
} 
0

我更喜歡codeka的答案,因爲它非常簡單,可能是最有效的做事方式。但是,正如你所看到的,當你需要時並不是最簡單的實現。

我有一些非常相似的東西,作爲擴展方法,所以你可以調用SubArray,它的行爲就像字符串上的Substring。

喜歡的東西:

public static T[] SubArray<T>(this T[] array, int startIndex, int length) 
{ 
    // various null, empty, out of range checks here 

    T[] returnArray = new T[length]; 
    Array.Copy(array, startIndex, returnArray, 0, length); 
    return returnArray; 
} 

var array1 = new[] { 1, 2, 3, 4, 5 }; 
var arrays2 = array1.SubArray(2, 3); 

您可以實現一些其他的過載,如:

public static T[] SubArray<T>(this T[] array, int startIndex) 
{ 
    // null check here 

    return SubArray(array, startIndex, array.Length - startIndex); 
} 
-1
using System.Linq; 

var array = new [] { 1, 2, 3, 4 }; 
var tail = array.Reverse().Take (array.Length - 1).Reverse();