【问题标题】:c# Leaner way of initializing int arrayc# 更简洁的初始化 int 数组的方法
【发布时间】:2012-12-20 11:59:31
【问题描述】:

使用下面的代码是否有更精简的方法将数组从 1 初始化为变量指定的数字?

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

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

也许使用 linq 或一些 array.function?

【问题讨论】:

    标签: c# .net arrays linq initialization


    【解决方案1】:
    int[] array = Enumerable.Range(0, nums).ToArray();
    

    【讨论】:

    • 这可能会创建一个分配过多内存的数组。 ToArray 不知道Enumerable.Range 中有多少元素。因此,它需要遍历所有这些并始终增加容量(使用加倍算法)。因此,您可能会以一个消耗几乎两倍所需内存的数组结束。 ——
    • @TimSchmelter 那么有没有像这样简单但资源消耗更少的替代方案? (在我的情况下,最大范围将达到 30...)
    • @ase69s 如果只有 30 个条目,那么不用担心。编辑:否则,我能想到的只是将List 之类的东西预初始化为您的能力:var items = new List&lt;int&gt;(nums);items.AddRange(Enumerable.Range(0, nums));
    • 这里有一个关于这个问题的问题:High memory consumption with Enumerable.Range?@ase69s:如果你只有30个项目,你不需要关心。
    • 谢谢大家的详细解释^^,答案接受了
    【解决方案2】:

    使用Enumerable.Range() 方法代替。不要忘记添加 System.Linq 命名空间。但这可能会花费一点点高内存。你可以用like;

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

    生成指定范围内的整数序列。

    【讨论】:

    • 另外,ToArray 不知道Enumerable.Range 中有多少元素。因此它需要foreach 所有这些总是增加容量(使用加倍算法)。因此,您可能会以一个消耗几乎两倍所需内存的数组结束。这是我自己关于这个问题的问题:High memory consumption with Enumerable.Range?
    【解决方案3】:

    使用Enumerable.Range

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

    【讨论】:

      【解决方案4】:

      也许我在这里遗漏了一些东西,但这是我所知道的最好的方法:

      int[] data = new int [] { 383, 484, 392, 975, 321 };

      来自MSDN

      更简单:

      int[] data = { 383, 484, 392, 975, 321 };

      【讨论】:

        猜你喜欢
        • 2015-04-08
        • 2013-07-20
        • 1970-01-01
        • 2014-03-13
        • 2010-10-24
        • 2020-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多