d迭代构或类的示例

原文
如何实现迭代构/类?这样:

foreach (k, v; T.init)
{
    ...
}

T.byKeyValue没用.

参考在此

你应该用opApply.示例:

struct A {
    static int[string] impl;
    static this() {
        impl = [
            "a": 1,
            "b": 2,
        ];
    }

    int opApply(scope int delegate(string a, int b) dg) {
        foreach (k, v; impl) {
            auto r = dg(k, v);
            if (r) return r;
        }
        return 0;
    }
}

void main() {
    import std;A a;
    foreach (k, v; a) {
        writefln("%s -> %s", k, v);
    }
}

或使用front()返回元组的区间函数.D有个特性,在foreach循环中自动展开元组:

import std.typecons : tuple;
import std.conv : to;
import std.stdio : writeln;
import std.range : take;

struct S {
    size_t count;
    bool empty = false;

    auto front() {
        const key = count;
        const value = key.to!string;
        return tuple(key, value);// 在此
    }

    void popFront() {
        ++count;
    }
}

void main() {
    foreach (k, v; S.init.take(10))
    {
        writeln(k, ": ", v);
    }
}

opApply和区间参考在此

posted @   zjh6  阅读(10)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示