如何在D中生成数组?

时间:2011-09-12 05:49:26

标签: arrays d

我有这个c ++ 11代码:

auto gen = []() -> double { /* do stuff */ };
std::generate(myArray.begin(), myArray.end(), gen);

我如何对D的阵列做同样的事情? std.algorithm.fill不接受函数对象,我不知道如何将函数传递给recurrence

2 个答案:

答案 0 :(得分:5)

这是一个似乎有用的版本:

import std.algorithm, std.array, std.range, std.stdio;

void main() {
  writefln("%s", __VERSION__);
  int i;
  auto dg = delegate float(int) { return i++; };
  float[] res = array(map!dg(iota(0, 10)));
  float[] res2 = new float[10];
  fill(res2, map!dg(iota(0, res2.length)));
  writefln("meep");
  writefln("%s", res);
  writefln("%s", res2);
}

[edit]添加了基于填充的版本(res2)。

我在Ideone(http://www.ideone.com/DFK5A)中对它进行了测试,但它崩溃了..带有当前版本DMD的friend说它有效,所以我假设Ideone的DMD刚刚过了大约十到二十版本

答案 1 :(得分:-1)

您可以执行类似

的操作
auto arr = {/* generate an array and return that array */}();

如果将其分配给全局,则应在编译时对其进行评估。

您还可以使用字符串mixins为数组文字生成代码。