在C#中获取数组尾部的最简单方法是什么 - 即。除了第一个元素之外的所有元素。
答案 0 :(得分:14)
var myArray = GetSomeArray();
myArray = myArray.Skip(1).ToArray();
请注意,我会尽量避免调用.ToArray()并坚持在.Net中使用IEnumerable<T>
。
答案 1 :(得分:6)
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)
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 ();