我想要一个数字列表:
auto nums = iota(0, 5000);
Run Code Online (Sandbox Code Playgroud)
现在nums是类型Result.它不能被强制转换int[],也不能用作替代品int[].
从文档中不太清楚如何实际使用iota作为范围.我使用了错误的功能吗?在D中制作"范围"的方法是什么?
cym*_*m13 11
iota就像Phobos中的许多功能一样,是懒惰的.结果是承诺在您需要时为您提供所需的内容,但实际上尚未计算任何值.您可以将其传递给foreach语句,例如:
import std.range: iota;
foreach (i ; iota(0, 5000)) {
writeln(i);
}
Run Code Online (Sandbox Code Playgroud)
你不需要它来做一个简单的foreach:
foreach (i ; 0..5000) {
writeln(i);
}
Run Code Online (Sandbox Code Playgroud)
除此之外,有希望明确的iota是它本身是有用的.懒惰也允许无成本链接转换:
/* values are computed only once in writeln */
iota(5).map!(x => x*3).writeln;
// [0, 3, 6, 9, 12]
Run Code Online (Sandbox Code Playgroud)
如果您需要一个"真实"值列表,请使用arrayfrom std.array来对其进行解密:
int[] myArray = iota(0, 5000).array;
Run Code Online (Sandbox Code Playgroud)
作为旁注,请注意该单词range在D中具有特定含义,而不是"数字范围",但描述的迭代器模型与python中的生成器非常相似.iota是一个范围(所以迭代器)产生数字的范围(通用含义).
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |