我正在搜索用0到随机数字填充数组的方式。例如,从0到12或1999等等
当然,有一个for
- 循环:
var arr = int[n];
for(int i = 0; i < n; i++)
{
arr[i] = i;
}
我可以将此方法作为Array
类的扩展。但是有更有趣的方法吗?
答案 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;
}
此循环遍历从0
到max-1
的所有数字,一次返回一个 - 但它只会在您实际需要时循环播放。
您也可以将其用作GetNumbers(max).ToArray()
来获取“普通”数组。
答案 2 :(得分:1)
最佳答案取决于您需要阵列的原因。问题是,任何数组元素的值都等于索引,因此访问任何元素本质上是一个冗余操作。为什么不使用带索引器的类,只返回索引的值?它与真正的数组无法区分,并且可以扩展到任何大小,除了它不需要内存和没有时间设置。但我觉得这不是你所追求的速度和紧凑性。也许如果你扩展问题,那么更好的解决方案将更加明显。