В D как применить функцию ко всем элементам массива?

В D как применить функцию ко всем элементам в массиве?

Например, я хочу применить функцию std.string.leftJustify() ко всем элементам в массиве строк.

Я знаю, что могу использовать цикл, но есть ли хорошая функция карты? Я вижу, что есть один в библиотеке std.algorithm, но я понятия не имею, как использовать шаблоны в D еще.

Любые примеры?

Ответ 1

Существует множество опций для указания лямбда. 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);
}

Ответ 2

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]));
}