【问题标题】:How to trim an array in .NET?如何在 .NET 中修剪数组?
【发布时间】:2009-11-17 19:56:06
【问题描述】:

假设我有一个数组

array<double>^ buffer = gcnew array<double>(100);

我想要一个功能,例如:

void foo(array<double>^% buffer)
{
    Array::Resize(buffer, 10);
}

但是当您想要修剪数组时,它不会分配和/或移动 &buffer[0]。

【问题讨论】:

    标签: .net vb.net visual-c++ c++-cli


    【解决方案1】:

    .NET 数组一旦创建,其大小就不会改变。你不能修剪它;你必须重新分配和复制。所以Array.Resize 已经做了你需要的一切。如果你真的不想这样做,也许只是忽略最后的元素。

    或者;使用List&lt;T&gt;,它封装一个数组,并且确实TrimExcess()。在 C# 中:

        var list = new List<int>(100);
        // prints 0/100
        Console.WriteLine("{0} / {1}", list.Count, list.Capacity);
        list.Add(1);
        list.Add(2);
        list.Add(3);
        // prints 3/100
        Console.WriteLine("{0} / {1}", list.Count, list.Capacity);
        list.TrimExcess();
        // prints 3/3
        Console.WriteLine("{0} / {1}", list.Count, list.Capacity);
    

    【讨论】:

    • 我很害怕。我在想 ArraySegment 可能会有所帮助,但我认为没有。谢谢:)
    【解决方案2】:

    您无法在 .NET 中执行此操作。 .NET 中的数组一旦分配就具有固定大小;改变数组大小的唯一方法是重新分配它(这就是 Array.Resize 所做的),这总是会改变数组在内存中的位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      • 2011-08-11
      • 1970-01-01
      • 2021-08-07
      • 1970-01-01
      相关资源
      最近更新 更多