调整列表大小并在列表 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 来构建下拉列表?