代码之家  ›  专栏  ›  技术社区  ›  Joel

获取数组的尾部

c#
  •  7
  • Joel  · 技术社区  · 15 年前

    在c-ie.中,除了第一个元素之外,获得数组尾部的最简单方法是什么?

    5 回复  |  直到 11 年前
        1
  •  14
  •   Joel Coehoorn    15 年前
    var myArray = GetSomeArray();
    myArray = myArray.Skip(1).ToArray();
    

    请注意,我尽量避免调用.toarray(),并坚持使用 IEnumerable<T> 而是在.NET中。

        2
  •  6
  •   Dean Harding    15 年前

    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}
    

    编辑 :JoelCoehoorn的答案更好,因为这意味着您可以避免使用数组!

        3
  •  1
  •   Francisco Noriega    15 年前

    哈哈,叫我老派,但嘿,这是有效的!

    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];
    }
    
        4
  •  0
  •   Joe Enos    15 年前

    我更喜欢codeka的答案,因为它非常简单,而且可能是最有效的方式。但是,正如您所看到的,在需要时实现它并不是最简单的。

    我有一些非常类似的东西,作为一个扩展方法,所以您可以调用子数组,它的行为就像字符串上的子字符串。

    类似:

    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);
    }
    
        5
  •  -1
  •   Danyal Aytekin    11 年前
    using System.Linq;
    
    var array = new [] { 1, 2, 3, 4 };
    var tail = array.Reverse ().Take (array.Length - 1).Reverse ();