我有使用数组的代码,不幸的是,我不能改变他们的类型.如果可以,我会使用ArrayLists或类似的东西做我需要做的事情,但我不能.基本上,我正在寻找从静态数组中添加和删除对象的最佳方法.为了在运行中向项目添加项目,我必须创建一个比旧数组大一个元素的新数组,将旧数组中的项目复制到新数组中,然后添加新项目.像这样的东西......
public partial class dataStruct { private myObject[] myStaticArray; }; private void AddItemToMyArray() { int oldLength = dataStruct.myStaticArray.Length; myObject[] newMyObjectArray = new myObject[oldLength + 1]; for (int i = 0; i < oldLength; i++) newMyObjectArray [i] = dataStruct.myStaticArray[i]; dataStruct.myStaticArray[oldLength] = new myObject(); dataStruct.myStaticArray = newMyObjectArray; }
为了删除一个项目,我做同样的事情,只有我创建一个较小的一个项目的新数组.这感觉真的很低效.任何人都可以建议一个更好的方法,如果有的话?或任何其他想法?
在此先感谢您的帮助!
否 - 数组始终是固定大小.您无法添加/删除条目.
这正是有效的限制ArrayList
和List
解决方法.它们在内部维护一个数组,但通常大于列表的逻辑大小.当你向List
它添加一个项目时,它将填充现有的数组(如果可以),或者如果没有足够的空间,它将创建一个新的,更大的数组并将内容复制到其中.此更改对调用者是透明的 - 您仍然可以使用原始引用,因为它是对列表的引用,而不是对基础数组的引用.
使代码更简单(但可能效率不高)的一件事是使用Array.Resize.它不会调整现有数组的大小,但会返回一个新数组,其中包含旧内容的浅表副本,其大小与您请求的大小相同.复制可能比手动循环快一点,但效率低下的主要原因仍然存在.