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

发布于 2024-12-25 08:13:17 字数 180 浏览 0 评论 0原文

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

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

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

有什么例子吗?

In D how do i apply a function to all elements in an array?

For example i want to apply the std.string.leftJustify() function to all elements in a string array.

I know i could use a loop but is there a nice map function? I see there is one in the std.algorithm library but i've no idea how to use templates in D yet.

Any examples?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

灯下孤影 2025-01-01 08:13:17

有很多选项可以指定 lambda。 map 返回一个在消耗时延迟计算的范围。您可以使用 std.array 中的函数 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);
}

There are a lot of options to specify the lambda. map returns a range that lazily evaluates as it is consumed. You can force immediate evaluation using the function array from 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);
}
善良天后 2025-01-01 08:13:17
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]));
}
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]));
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文