我想通过用户输入向我的数组添加元素。 我知道使用列表可以很容易地完成,但我必须使用数组。
代码的问题是array.lenght将始终为1。 我希望数组的大小与其中元素的总量相同,所以 声明数组时不应设置数组的大小。
我认为如果你向一个数组添加一个元素,它将复制先前的值+添加的值并创建一个新的数组。
更新答案
public static void Add(int x){
if (Item == null) // First time need to initialize your variable
{
Item = new int[1];
}
else
{
Array.Resize<int>(ref Item, Item.Length + 1);
}
Item[Item.Length-1] = x; //fixed Item.Length -> Item.Length-1
}
答案 0 :(得分:1)
使用List<int>
而不是显式数组,这将为您动态调整大小,并使用Add()方法在末尾添加元素。
答案 1 :(得分:0)
在向其添加元素时,列表会增长。数组具有恒定的大小。如果必须使用数组,最简单的方法是创建一个足以容纳输入元素的数组。
private int[] _items = new int[100];
private int _count;
public void Add(int x)
{
_items[_count++] = x;
}
您还需要跟踪已插入的元素数量(我在此处使用了字段_count
);
例如,您可以枚举所有这些项目:
for (int i = 0; i < _count; i++) {
Console.WriteLine(_items[i]);
}
您可以像下列这样公开访问这些项目:
public int[] Items { get { return _items; } }
public int Count { get { return _count; } }
<强>更新强>
如果要自动增大数组大小,最好在数组变得太小时将实际大小加倍。它是速度和内存效率之间的良好折衷(这就是列表在内部的工作方式)。
private int[] _items = new int[8];
private int _count;
public void Add(int x)
{
if (_count == _items.Lengh) {
Array.Resize(ref _items, 2 * _items.Length);
}
_items[_count++] = x;
}
但是,请记住,这会更改数组引用。因此,不应将此数组引用的永久副本存储在其他任何位置。
答案 2 :(得分:0)
我没有在VS中测试。你走了:
namespace ConsoleApplication1
{
class Program
{
static int[] Item; //Fixed int Item[] to int[] Item
static void Main(string[] args)
{
Add(3);
Add(4);
Add(6);
}
public static void Add(int x){
if (Item == null) // First time need to initialize your variable
{
Item = new int[1];
}
else
{
Array.Resize<int>(ref Item, Item.Length + 1);
}
Item[Item.Length-1] = x; //fixed Item.Length -> Item.Length-1
}
}
}
这应该每次调整一次数组大小,然后将最后一项设置为您要添加的项目。请注意,这非常低效。