Dlang MyMap 类实现 foreach 循环遍历

要增加 foreach 语句支持,需要在 MyMap 类中实现 opApply 函数。opApply 函数是 D 语言中用于支持 foreach 语句的函数,它需要返回一个 bool 类型的值,表示循环是否继续。以下是修改后的代码:

import std.stdio;

class MyMap(K, V)
{
    private {
        V[K] data;
    }

    public {
        void insert(K key, V value)
        {
            data[key] = value;
        }

        V get(K key)
        {
            return data[key];
        }

        void byKeyValue(void delegate(K, V) dg)
        {
            foreach (key, value; data) {
                dg(key, value);
            }
        }

        void byKey(void delegate(K) dg)
        {
            foreach (key; data.keys) {
                dg(key);
            }
        }

        void byValue(void delegate(V) dg)
        {
            foreach (value; data.values) {
                dg(value);
            }
        }

        bool opApply(scope delegate(ref const(K), ref const(V)) dg)
        {
            foreach (key, value; data) {
                dg(key, value);
            }
            return true;
        }
    }
}

void main()
{
    auto map = new MyMap!(string,int)();

    map.insert('one', 1);
    map.insert('two', 2);
    map.insert('three', 3);

    // 遍历键值对
    foreach (key, value; map) {
        writeln(key, ': ', value);
    }

    // 遍历键
    foreach (key; map.keys) {
        writeln(key);
    }

    // 遍历值
    foreach (value; map.values) {
        writeln(value);
    }
}

现在,可以使用 foreach 语句遍历 MyMap 类的实例了。例如,可以使用 foreach (key, value; map) 遍历键值对。

Dlang MyMap 类实现 foreach 循环遍历

原文地址: https://www.cveoy.top/t/topic/olUs 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录