如何在运行时分配数组值

时间:2009-04-07 07:33:44

标签: c#

考虑我有一个数组,

int[] i = {1,2,3,4,5};

这里我为它指定了值。但在我的问题中,我只在运行时获得这些值。 如何将它们分配给数组。

例如:

我从用户获取数组的最大大小以及现在的值,如何将它们分配给数组int []。

或者我可以使用其他数据类型,如ArrayList等,我可以在最后投射到Int []吗?

5 个答案:

答案 0 :(得分:18)

嗯,最简单的方法是使用List<T>

List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
list.Add(4);
list.Add(5);
int[] arr = list.ToArray();

否则,您需要分配一个合适大小的数组,并通过索引器进行设置。

int[] arr = new int[5];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
arr[4] = 5;

如果无法预测数组的大小,则第二种方法无用,因为每次添加项目时重新分配数组的成本都很高; List<T>使用加倍策略来最小化所需的重新分配。

答案 1 :(得分:11)

你的意思是?

int[] array = { 1, 2, 3, 4, 5 };
array = new int[] { 1, 3, 5, 7, 9 };
array = new int[] { 100, 53, 25, 787, 39 };
array = new int[] { 100, 53, 25, 787, 39, 500 };

答案 2 :(得分:7)

使用List<int>,然后在末尾调用ToArray()以创建数组。但你真的需要一个数组吗?使用其他集合类型通常更容易。正如Eric Lippert所写,“arrays considered somewhat harmful”。

可以明确地执行此操作,如下所示:

using System;

public class Test
{
    static void Main()
    {
        int size = ReadInt32FromConsole("Please enter array size");

        int[] array = new int[size];
        for (int i=0; i < size; i++)
        {
            array[i] = ReadInt32FromConsole("Please enter element " + i);
        }

        Console.WriteLine("Finished:");
        foreach (int i in array)
        {
            Console.WriteLine(i);
        }
    }

    static int ReadInt32FromConsole(string message)
    {
        Console.Write(message);
        Console.Write(": ");
        string line = Console.ReadLine();
        // Include error checking in real code!
        return int.Parse(line);
    }
}

答案 3 :(得分:0)

如果你想要一个在执行过程中大小不同的数组,那么你应该使用另一个数据结构。通用列表可以。然后,您可以动态地向其添加元素。

编辑:在我写作时,Marc发布了他的回答。这正是我的意思。

答案 4 :(得分:0)

您可以使用以下行而不是调用单独的函数:

using System;

public class Test
{
    static void Main()
    {
        Console.WriteLine("Please enter array size");
        int size = Convert.ToInt32(Console.ReadLine());

        int[] array = new int[size];
        for (int i=0; i < size; i++)
        {
            Console.WriteLine("Please enter element " + i);
            array[i] = Convert.ToInt32(Console.ReadLine());
        }

        Console.WriteLine("Finished:");
        foreach (int i in array)
        {
            Console.WriteLine(i);
        }
    }