Dlang MyMap 类实现 foreach 循环遍历
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) 遍历键值对。
原文地址: https://www.cveoy.top/t/topic/olUs 著作权归作者所有。请勿转载和采集!