我想要一个数字列表:
auto nums = iota(0, 5000);
现在nums
属于Result
类型。它不能强制转换为int[]
,也不能用作int[]
的插入式替换。
从文档中还不太清楚如何实际使用iota
作为范围。我用错函数了吗?在D中生成"范围"的方法是什么?
iota
和火卫一中的许多函数一样,是惰性的。结果是承诺在您需要的时候给您所需要的东西,但还没有实际计算出价值。您可以将其传递给foreach
语句,例如:
import std.range: iota;
foreach (i ; iota(0, 5000)) {
writeln(i);
}
不过,你不需要它来进行简单的前臂:
foreach (i ; 0..5000) {
writeln(i);
}
除此之外,希望iota
本身是有用的。懒惰还可以实现无成本的转换链接:
/* values are computed only once in writeln */
iota(5).map!(x => x*3).writeln;
// [0, 3, 6, 9, 12]
如果您需要一个"真实"的值列表,请使用std.array
中的array
对其进行延迟:
int[] myArray = iota(0, 5000).array;
顺便提醒一下,单词range
在D中有一个特定的含义,它不是"数字范围",而是描述一个迭代器模型,很像python中的生成器。iota
是一个范围(因此是一个迭代器),它产生了一个数字范围(通用含义)。