我有以下dlang语言代码我怎么增加foreach语句支持即用foreach就可以遍历MyMap代码如下:import stdstdio;class MyMapK V private VK data; public void insertK key V value datakey = value;
要增加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)遍历键值对
原文地址: http://www.cveoy.top/t/topic/fF6Y 著作权归作者所有。请勿转载和采集!