考虑我有一个数组,
int[] i = {1,2,3,4,5};
这里我为它指定了值。但在我的问题中,我只在运行时获得这些值。 如何将它们分配给数组。
例如:
我从用户获取数组的最大大小以及现在的值,如何将它们分配给数组int []。
或者我可以使用其他数据类型,如ArrayList等,我可以在最后投射到Int []吗?
答案 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);
}
}