在 D 的关联数组中迭代 key/value 对。
Iterate over key/value pairs in associative array in D.
我不知道为什么我在网上找不到这个问题的答案。这似乎是一件很简单的事情。
关联数组有一个 byValue
成员和一个 byKey
成员用于迭代值和键。还有一个 byKeyValue
成员用于遍历 key/value 对。只是不清楚使用 foreach
迭代时 returns 是什么类型,编译器抱怨 auto
在这里不够好。
语言文档 (https://dlang.org/spec/hash-map.html) 将其称为 "opaque type"。
知道如何让注释代码正常工作吗?谢谢!
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;
}
所以首先,你甚至不需要任何东西:
foreach(key, value; contained) {
// use right here
}
但是 .byKeyValue 的效率更高,所以使用起来很酷...只是根本不指定类型(事实上,您很少需要使用 D 的 foreach,顺便说一句,它是在 foreach 语句中使用 auto
总是错误的 - 这是一个常见的错误,因为它在许多其他地方使用......)
foreach(item; contained.byKeyValue()) {
writeln(item.key, " ", item.value);
}
此外,如果您总是希望 main
到 return 0
,您可以使用 void main
- 语言会自动执行此操作。
我不知道为什么我在网上找不到这个问题的答案。这似乎是一件很简单的事情。
关联数组有一个 byValue
成员和一个 byKey
成员用于迭代值和键。还有一个 byKeyValue
成员用于遍历 key/value 对。只是不清楚使用 foreach
迭代时 returns 是什么类型,编译器抱怨 auto
在这里不够好。
语言文档 (https://dlang.org/spec/hash-map.html) 将其称为 "opaque type"。
知道如何让注释代码正常工作吗?谢谢!
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;
}
所以首先,你甚至不需要任何东西:
foreach(key, value; contained) {
// use right here
}
但是 .byKeyValue 的效率更高,所以使用起来很酷...只是根本不指定类型(事实上,您很少需要使用 D 的 foreach,顺便说一句,它是在 foreach 语句中使用 auto
总是错误的 - 这是一个常见的错误,因为它在许多其他地方使用......)
foreach(item; contained.byKeyValue()) {
writeln(item.key, " ", item.value);
}
此外,如果您总是希望 main
到 return 0
,您可以使用 void main
- 语言会自动执行此操作。