我不知道为什么我在网上找不到答案。看起来这么简单。
关联数组有一个byValue
成员和一个byKey
成员,用于迭代值和键。还有一个byKeyValue
成员用于迭代键/值对。它只是不清楚它使用foreach
进行迭代返回的类型,并且编译器抱怨auto
在这里不够好。
语言文档(https://dlang.org/spec/hash-map.html)将其称为“不透明类型”。
知道如何让注释代码有效吗?谢谢!
int main(){
int[string] contained;
contained["foo"] = 4;
contained["bar"] = 5;
contained["gooey"] = 7;
writeln("*by values*");
foreach(int i ; contained.byValue){
writeln(i);
}
writeln("*by keys*");
foreach(string i ; contained.byKey){
writeln(i);
}
// writeln("*by key/values*");
//foreach(auto i ; contained.byKeyValue){
//writeln(i.key,i.value);
//}
return 0;
}
答案 0 :(得分:5)
首先,你甚至不需要一件事:
foreach(key, value; contained) {
// use right here
}
但.byKeyValue可以更高效,所以使用起来很酷......根本不指定类型(事实上,你很少需要使用D的foreach,顺便说一下它总是错的在foreach语句中使用auto
- 一个常见错误,因为它在许多其他地方使用...)
foreach(item; contained.byKeyValue()) {
writeln(item.key, " ", item.value);
}
另外,如果您始终希望void main
返回main
,则可以使用0
- 该语言会自动执行此操作。