Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在D中生成数组?_Arrays_D - Fatal编程技术网

Arrays 如何在D中生成数组?

Arrays 如何在D中生成数组?,arrays,d,Arrays,D,我有以下c++11代码: auto gen = []() -> double { /* do stuff */ }; std::generate(myArray.begin(), myArray.end(), gen); 我如何对D的数组执行相同的操作std.algorithm.fill不接受函数对象,我不知道如何将函数传递给递归您可以执行以下操作 auto arr = {/* generate an array and return that array */}(); 如果它被分配给

我有以下c++11代码:

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

我如何对D的数组执行相同的操作
std.algorithm.fill
不接受函数对象,我不知道如何将函数传递给
递归

您可以执行以下操作

auto arr = {/* generate an array and return that array */}();
如果它被分配给一个全局变量,则应该在编译时对其进行评估


您还可以使用字符串混合生成数组文字的代码。

以下是一个似乎有效的版本:

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);
}
[编辑]添加了基于填充的版本(res2)


我用Ideone()测试了它,但它崩溃了。。使用当前版本的DMD的a说它可以工作,所以我假设Ideone的DMD已经过时了大约十到二十个版本。

你想用现有的数组填充数据吗?@nekurometo是的。生成一个新的数组也可以。对不起,这和他想要的几乎没有关系。为什么?他说生成一个新的数组也可以。他所做的是将一个范围映射到一个函数上,以填充或生成一个数组。就您所做的而言,该函数基本上是多余的。当您在其上运行代码时,ideone将告诉您它使用的编译器版本。它目前正在使用DMD2.042。dmd的当前版本是2.055,因此落后了13个版本。所以,在这一点上,关于D代码,我不会相信ideone。有很多东西可以使用,但是自从2.042以来已经发生了太多的变化,这对于可编译性或行为来说是一个非常好的测试。哦,没有看到这一点-因此writefln(“%s”,版本在顶部。:)对不起,不太好。阵列应该包含浮点数,
iota
不能与浮点数一起工作(对于使用2.055的我,我得到
内部错误:../ztc/cg87.c202
)。我不知道你为什么得到它。试试稍旧的版本。数组应该包含浮点数,但您忽略了一个事实,即我们正在使用iota将int范围映射到浮点数生成函数。所以一切都解决了。(请注意,我的数组类型为float[]。此外,请注意,我已确认这是可行的。)