获取数组的尾部

时间:2010-05-17 03:58:01

标签: c#

在C#中获取数组尾部的最简单方法是什么 - 即。除了第一个元素之外的所有元素。

5 个答案:

答案 0 :(得分:14)

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

请注意,我会尽量避免调用.ToArray()并坚持在.Net中使用IEnumerable<T>

答案 1 :(得分: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}

编辑:Joel Coehoorn的回答更好,因为这意味着您可以完全避免使用数组!

答案 2 :(得分:1)

LOL叫我老学校,但嘿它有效!

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];
}

答案 3 :(得分: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);
}

答案 4 :(得分:-1)

using System.Linq;

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