调整列表大小并在列表 C# 中引用变量位置

Posted

技术标签:

【中文标题】调整列表大小并在列表 C# 中引用变量位置【英文标题】:Sizing a List and referencing variable positions in a List C# 【发布时间】:2021-10-10 17:56:59 【问题描述】:

需要存储许多变量,起初使用数组,但是当我尝试使用单独的变量调整数组中的位置数量时出现错误。网上看了下,有人说,最好用List。

我使用起来非常混乱。试图在逻辑上使用它,但我就是不明白。

所以我设置了我的列表: public List<int> TESTValues = new List<int>(10);

从逻辑上讲,对我来说,应该有一个包含 10 个职位的列表,但没有,它是空的。如果我使用它只会添加一个变量:TESTValues.Add(1); 它只在下一个可用位置添加 1 个新变量,当它应该是位置 11 时,它是 1 对吗?

假设我会以某种方式获得一个包含 10 个变量的列表,那么我将如何在列表的第 8 位引用一个变量,甚至更新它?我尝试使用类似的东西:TESTValues.IndexOf(8) = 40; 遗憾的是这不起作用。

有人对这些列表以及我如何使用它们有很好的了解吗?解释他们?原以为 List 比 Array 更简单,现在看来正好相反。

【问题讨论】:

阅读文档。 [LIst<int>(10)]((docs.microsoft.com/en-us/dotnet/api/…) 导致创建初始容量为 10 个元素的整数列表,您必须添加该列表。将元素添加到列表后,您可以按索引引用它。例如 @ 987654327@ 其中 2 是在列表中找到 30 的位置。 这是Capacity 而不是Count 请阅读文档docs.microsoft.com/en-us/dotnet/api/… 太棒了。 Debug.Log(TESTValues[1]); 有效,但我仍然不明白列表声明。我可以用 10 声明它并添加 5,但是当我运行代码时,我只有 5 而不是 15。 很好,我也可以使用TESTValues[1] = 10; 来更新变量。一些很棒的东西。仍然对尺寸声明部分感到困惑。我是否声明public List<int> TESTValues = new List<int>(); 并在单独的行上执行TESTValues.Capacity(10); 之类的操作? 没有。创建列表时不需要声明大小。它将扩展到您添加的尽可能多的元素。 【参考方案1】:

Capacity != 大小 (Count)

获取或设置内部数据结构无需调整大小即可容纳的元素总数

赋予构造函数的初始容量只有一个目的:立即分配。

通常默认情况下,List<T>4 的初始 容量 开头。在底层,它只是将值存储在一个数组中。

然后每次添加元素时,新的大小都会超过 容量,那么底层数组就会被复制到一个新数组中,该数组是原始大小的两倍(= 容量列表)。


“大小”(= 列表中的Count)只能通过添加元素来增长!

获取List<T>中包含的元素个数。


现在初始化一个已经有 10 个元素的列表的唯一方法是使用另一个集合,例如,

var yourList = new List<int>(new int[10]);

当然,这需要分配一个数组 => 为 GC 工作,但如果你只这样做一次,可能问题不大。

或者使用Linq你也可以这样做

using System.Linq;

...

var yourList = Enumerable.Repeat(0, 10).ToList();

【讨论】:

以上是关于调整列表大小并在列表 C# 中引用变量位置的主要内容,如果未能解决你的问题,请参考以下文章

C# 数据结构,可以动态调整大小到给定限制的列表,并允许快速访问任何索引

如何将宽度和高度大小与 Regex 表达式匹配并在 SQL 或 C# 中使用 Sort By 来构建下拉列表?

调整平面按钮的大小并在颤动中提供水平滚动选项

根据列表大小调整引导菜单多列的大小

为什么我的列表框没有调整大小? (动态调整对话框组件的大小)

为啥我的列表框没有调整大小? (动态调整对话框组件的大小)