我在C#中的字符数组。
var arr = new char[3] { 'a','b','c' };
如何添加空格它的结束,而无需创建一个新的数组?
结果: arr = { 'a', 'b', 'c', ' ', ' ', ' ' };
这听起来类似VB.NET的ReDim
。 但我不知道那是什么,我想无论是。 我想保留它里面的内容,而不是实例化幕后的新数组。
这是唯一可能与泛型集合和ArrayList?
谢谢
我在C#中的字符数组。
var arr = new char[3] { 'a','b','c' };
如何添加空格它的结束,而无需创建一个新的数组?
结果: arr = { 'a', 'b', 'c', ' ', ' ', ' ' };
这听起来类似VB.NET的ReDim
。 但我不知道那是什么,我想无论是。 我想保留它里面的内容,而不是实例化幕后的新数组。
这是唯一可能与泛型集合和ArrayList?
谢谢
不,这是不可能的使用数组,通用或以其他方式..据我所知,是没有办法来动态调整大小的数组。 使用列表来代替。
由于马丁在评论中指出,即使是List
类使用它的内部实现的数组。 如果你想真正能够动态调整数据结构,而不重新初始化,您必须实现自己的一个版本链表 。
System.Collections.Generic
包含一个类中调用LinkedList的表示一个双向链表(即每个节点既下一个和前一个节点的引用),但我不知道它的内部实现使用数组..
遗憾的是,数组是通过设计预先固定的。 因为它会在堆保留的内存必要的大写金额,这是非常重要的。
因此,要回答你的需求约没有创造一个新问题: 这是不可能的 。
然而,有,一个变通。 看看下面的方法:
Array.Resize(ref myArr, myArr.Length + 5);
它的工作原理是在源描述:
这个方法分配具有指定大小的新数组,从旧的数组元素复制到新的一个,然后替换旧序列与该新的。
如果数组为空,该方法创建具有指定大小的新数组。
如果新尺寸大于旧数组的长度时,一个新的数组分配,所有的元素都从旧阵列到新的复制。 如果新尺寸小于旧数组的长度,一个新的数组分配和元素从旧阵列到新的,直到新的一个被填充复制; 旧的数组中的元素的其余部分被忽略。 如果新尺寸等于旧数组的长度,这个方法不起作用。
此方法是一个为O(n),其中n是新尺寸。
这意味着myArr
将被更新以引用新的阵列。 但是,如果有另一个参照原数组,这将不会被更新(它会继续引用旧版本)。
来源: MSDN