.NET中的方法是从0到n获取int数组

时间:2009-05-12 19:42:51

标签: c# .net arrays

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

当然,有一个for - 循环:

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

我可以将此方法作为Array类的扩展。但是有更有趣的方法吗?

3 个答案:

答案 0 :(得分:30)

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

arr = Enumerable.Range(0, n);

答案 1 :(得分:6)

在我看来,最有趣的方法不是产生数组,而是枚举相同数字的IEnumerable<int> - 它具有O(1)设置时间的好处,因为它推迟了实际循环的执行:

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

此循环遍历从0max-1的所有数字,一次返回一个 - 但它只会在您实际需要时循环播放。

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

答案 2 :(得分:1)

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