C# 初始化整型数组的更简洁方法

4

如果有以下代码,是否有更简单的方法从1初始化数组到由变量指定的数字?

int nums=5;
int[] array= new int[nums];

for(int i=0;i<num;i++)
{
   array[i] = i;
}

也许可以使用linq或一些数组函数来实现?
4个回答

6
int[] array = Enumerable.Range(0, nums).ToArray();

这可能会创建一个分配了太多内存的数组。ToArray 不知道 Enumerable.Range 中有多少元素。因此,它需要遍历所有元素并始终增加容量(使用倍增算法)。因此,您可能会得到一个消耗几乎两倍所需内存的数组。 - Tim Schmelter
@TimSchmelter 那么是否有一种类似于这样但资源消耗更少的替代方案呢?(在我的情况下,范围最多只会达到30...) - VSP
2
如果只有30个条目,那就不用担心了。编辑:否则,我能想到的就是预先初始化像List这样的东西到你的容量:var items = new List<int>(nums);items.AddRange(Enumerable.Range(0, nums)); - Chris Sinclair
2
这里有一个与此问题相关的问题:Enumerable.Range导致高内存消耗? @ase69s:如果你只有30个项目,你不需要担心。 - Tim Schmelter
感谢大家详细的解释 ^^,答案已被接受 - VSP
这里有一个重复的问题,其中包含了很多改进大型数组初始化的方法 - https://dev59.com/u2zXa4cB1Zd3GeqPSlqF - Alexei Levenkov

1

使用Enumerable.Range()方法代替。不要忘记添加System.Linq命名空间。但这可能会消耗一些内存。你可以像这样使用;

int[] array = Enumerable.Range(0, nums).ToArray();

在指定的范围内生成一系列整数。

2
另外,ToArray不知道Enumerable.Range中有多少元素。因此,它需要foreach所有元素并始终增加容量(使用倍增算法)。因此,您可能会得到一个消耗几乎两倍所需内存的数组。这是我自己关于此问题的问题:Enumerable.Range的高内存消耗? - Tim Schmelter

0

0
也许我有所遗漏,但以下是我所知道的最佳实现方法:
int[] data = new int [] { 383, 484, 392, 975, 321 };
来源:MSDN 更简单的方式是:
int[] data = { 383, 484, 392, 975, 321 };

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接