gpt4 book ai didi

c# - 在 C# 中使用定长数组

转载 作者:行者123 更新时间:2023-11-30 13:27:53 24 4
gpt4 key购买 nike

我是 C# 的新手,但对 ActionScript 3 有很深的了解。

在 AS3 中,你可以这样定义一个数组:

var array:Array = [];

然后通过 push() 向该数组添加无限项:

array.push(1);

我注意到在 C# 中你需要为数组定义一个永久的(我认为)长度,例如:

string[] array = {"this","has","a","length","of","six"};

或者:

string[] array = new string[6];

如果我尝试向数组中添加超出此数组长度的新项,我会得到一个错误:

array[6] = "failure";

我发现很难从能够自由地从数组中添加/删除项目,到现在必须定义最大长度。

当数组可以包含 0 到 10000 个实体之间的任意位置时,我不太确定在游戏环境中应该如何处理这个问题。

  1. 我是否只是让数组长度非常长以满足我可能拥有的所有实际数量的实体?
  2. 是否有其他我不知道的应该在 C# 中使用的实体存储方式?
  3. 我是否编写自己的类来重新声明具有新长度的数组并将对象从旧数组复制到新数组中,并留下 1 个空闲槽?

任何建议都会有帮助!

最佳答案

如您所知,C# 中数组的大小是固定的; Resizing an array引用指定大小的新数组实例,并将数组中的项目复制到新引用的实例中。

您在 .NET 中寻找的是 generic collections例如 List<T> , 其中T是某种类型的通用类型参数。在您突出显示的特定情况下,您可能希望使用 List<string>

var strings = new List<string>();

现在您可以使用 Add() 将字符串添加到集合中

strings.Add("string to add");

在 C#3 中,collection intializers引入是为了让您可以更简洁地初始化集合

var strings = new List<string> { "string1", "string2", "string3" };

当您创建一个通用集合的实例时,它以默认大小开始; List<T> 的默认大小在 .NET 4 中为 0,尽管在添加第一项时增加到 4(默认大小可能因不同的集合类型和框架版本而异,因此默认大小听起来像是一个实现细节)。集合通常由框架使用加倍策略调整大小,也就是说,当集合达到容量并且尝试添加另一个项目时,集合容量通常加倍 - 这在通用集合的实现和一些你不需要关心的事情。

当您要将已知数量的项目添加到集合中或知道要添加的项目数量的数量级时,您可能需要牢记这一点。在这种情况下,您可以考虑使用 List<T> 的重载构造函数。这需要 int对于默认大小

var strings = new List<string>(500);

关于c# - 在 C# 中使用定长数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8498347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com