【问题标题】:Ways in .NET to get an array of int from 0 to n.NET 中获取从 0 到 n 的 int 数组的方法
【发布时间】:2009-05-12 19:42:50
【问题描述】:

我正在寻找用从 0 到随机数的数字填充数组的方法。例如,从 0 到 12 或 1999 等。

当然有for-loop:

var arr = int[n];
for(int i = 0; i < n; i++)
{
  arr[i] = i;
}

我可以让这个方法成为Array 类的扩展。但是有没有更有趣的方法呢?

【问题讨论】:

  • 你可以做一些功能实现。您可以填充 List 并使用 ToArray。归根结底,我认为没有什么有趣的解决方案,因为这个问题真的没有那么有趣。
  • 你想对数组做什么?我喜欢'配置器的解决方案...
  • 实际上我的解决方案给你的结果与 Enumerable.Range(0, n) 相同 - 我暂时忘记了那个方法。

标签: c# .net arrays


【解决方案1】:

这已经存在(返回 IEnumerable,但如果你需要,这很容易改变):

arr = Enumerable.Range(0, n);

【讨论】:

    【解决方案2】:

    在我看来,最有趣的方式不是生成数组,而是枚举相同数字的 IEnumerable&lt;int&gt; - 它具有 O(1) 设置时间的好处,因为它延迟了实际循环的执行:

    public IEnumerable<int> GetNumbers(int max) {
        for (int i = 0; i < max; i++)
            yield return i;
    }
    

    此循环遍历从 0max-1 的所有数字,一次返回一个 - 但它仅在您真正需要时才通过循环。

    您也可以将其用作GetNumbers(max).ToArray() 来获取“普通”数组。

    【讨论】:

      【解决方案3】:

      最佳答案取决于您需要数组的原因。问题是,任何数组元素的值都等于索引,因此访问任何元素本质上是一种冗余操作。为什么不使用带有索引器的类,它只返回索引的值?它将与真正的数组没有区别,并且可以扩展到任何大小,除了它不需要内存也不需要时间来设置。但我觉得你追求的不是速度和紧凑性。也许如果你扩展问题,那么更好的解决方案会更明显。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-04
        • 2021-06-09
        • 2014-02-28
        • 2015-02-07
        • 2010-11-21
        • 2017-04-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多