如何在不改变容量的情况下设置 c# 的计数?

How to set count of c# without altering capacity?

我确切地知道我想在列表中保留多少项目,它们是有序的,我只需要它在我知道的特定索引处完成,但我不想改变容量或使用 TrimExcess为了使它变小,否则再次添加项目后,列表的大小将再次增加一倍。

如何设置计数而不是使用 Remove 或 RemoveAt 或 RemoveRange?。

我的首要任务是优化此操作的速度。

重要提示:我知道我可以使用数组,但不允许这样做。另外,我一直在添加和删除项目。我只是希望容量保持在一个类似的数量,我不太清楚,但它会稳定下来。

使用数组并(在 C# 8.0 及更高版本中)使用带切片的索引和范围。 https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-8#indices-and-ranges

如果删除元素,容量不会改变。因此,如果您不使用 TrimExcess(),容量只会增加(到您曾经用于此列表的最大值)。因此,再次删除元素不会影响性能。您可以在构造函数中设置初始容量,如果您知道将使用多少元素(或对其进行估计),这是一个好主意,因为这将在最初构建列表时消除加倍的过载.

注意:列表中的Insert/Remove仍然是O(n),因为元素最终需要编译(除非你只在列表的尾端操作)。