【问题标题】:Resize Array By Last and not by First in C#在 C# 中按最后而不是按第一个调整数组大小
【发布时间】:2011-06-01 06:49:12
【问题描述】:

我有一个 Class 元素数组,通过一个 int 变量我需要将此数组的大小调整为最后的 X 个元素。

所以例如我有一个数组:

Array[0] = Msg1
Array[1] = Msg2
Array[2] = Msg3
Array[3] = Msg4
Array[4] = Msg5
Array[5] = Msg6
Array[6] = Msg7
Array[7] = Msg8
Array[8] = Msg9
Array[9] = Msg10

我只需要数组中的最后 8 个元素。

我不能使用 Array.Resize 函数,因为结果是:

Array[0] = Msg1
Array[1] = Msg2
Array[2] = Msg3
Array[3] = Msg4
Array[4] = Msg5
Array[5] = Msg6
Array[6] = Msg7
Array[7] = Msg8

我需要这样的东西:

Array[0] = Msg3
Array[1] = Msg4
Array[2] = Msg5
Array[3] = Msg6
Array[4] = Msg7
Array[5] = Msg8
Array[6] = Msg9
Array[7] = Msg10

我该怎么做?我希望我的问题很清楚。

谢谢。

【问题讨论】:

    标签: c# arrays resize


    【解决方案1】:

    使用 LINQ:

    array = array.Skip(array.Length - 8).ToArray();
    

    没有 LINQ:

    int[] temp = new int[8];
    Array.Copy(array, array.Length - temp.Length, temp, 0, temp.Length);
    array = temp;
    

    【讨论】:

    • 哦,Linq! Skip(array.length - 8) 可能更好?
    • 对不起,我在 WinMo 中,所以我不能使用外部集合..而且我的数组类没有跳过功能 :(
    • @Leen15:我的更新对您有帮助吗?查看最终建议(如果看不到请刷新页面)。
    【解决方案2】:

    创建一个新数组,然后执行
    Array.Copy().
    或者,使用 LINQ,您可以这样做
    array.Skip(array.Length - 8).Take(8).ToArray()

    【讨论】:

      【解决方案3】:

      它们的顺序必须相同吗?

      这样的事情怎么样

      Reverse(Array);
      Resize(ref Array, 8)?
      

      哎呀,您可以再次反转以取回您的订单

      【讨论】:

      • 我无法反转数组,数组中有按日期排列的消息。
      【解决方案4】:

      我认为您可能使用了错误的集合。从您的示例看来,QueueLinkedList 将是更好的选择,这两者都会使您的操作更加轻松,甚至是微不足道的,并且自 2.0 以来,它们都已成为 .NET FCL 的一部分。 (不需要专门的馆藏图书馆。)

      对于 Queue 集合,您可以简单地调用 Dequeue n-times,使用 LinkedList 您可以调用 RemoveFirst n-times,从而得到最终结果。

      除了修剪集合的开头,您还将使用其他可能有用的 LinkedList 或 Queue 操作。

      【讨论】:

        【解决方案5】:

        许多将数组作为参数的函数都有带有附加参数的重载,例如 startIndex 以及 length/countendIndex。第二个参数有时是可选的,因为可以使用 Array.Length 属性推断长度或 endIndex。

        例如:

        SomeFunction<T>(T[] array, int startIndex, int length)
        

        SomeFunction<T>(T[] array, int startIndex, int endIndex)
        

        把这个扔出去;也许这是你的一个选择。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-07
          • 1970-01-01
          • 1970-01-01
          • 2011-07-27
          • 2016-03-18
          相关资源
          最近更新 更多