C#通过用户输入向数组添加值

时间:2013-04-07 17:58:35

标签: c#

我想通过用户输入向我的数组添加元素。 我知道使用列表可以很容易地完成,但我必须使用数组。

代码的问题是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
 }

3 个答案:

答案 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
     }

    }
}

这应该每次调整一次数组大小,然后将最后一项设置为您要添加的项目。请注意,这非常低效。