在D中如何将函数应用于数组中的所有元素?

时间:2012-01-04 23:11:43

标签: arrays d

在D中如何将函数应用于数组中的所有元素?

例如,我想将std.string.leftJustify()函数应用于字符串数组中的所有元素。

我知道我可以使用循环但是有一个很好的地图功能吗?我看到std.algorithm库中有一个,但我还不知道如何在D中使用模板。

任何例子?

2 个答案:

答案 0 :(得分:12)

有很多选项可以指定lambda。 map返回一个在消耗时懒惰计算的范围。您可以使用array中的std.array函数强制立即进行评估。

import std.algorithm;
import std.stdio;
import std.string;

void main()
{
    auto x = ["test", "foo", "bar"];
    writeln(x);

    auto lj = map!"a.leftJustify(10)"(x); // using string mixins
    // alternative syntaxes:
    //   auto lj = map!q{a.leftJustify(10)}(x);
    //   auto lj = map!(delegate(a) { return a.leftJustify(10) })(x);
    //   auto lj = map!(a => a.leftJustify(10))(x); available in dmd 2.058
    writeln(lj);
}

答案 1 :(得分:4)

import std.algorithm;
import std.stdio;

void main()
{
    writeln(map!(a => a * 2)([1, 2, 3]));
    writeln(map!(delegate(a) { return a * 2; })([1, 2, 3]));
}