迭代D中的关联数组中的键/值对.

Joh*_*etz 1 d

我不知道为什么我在网上找不到答案.看起来这么简单.

关联数组有一个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;
}
Run Code Online (Sandbox Code Playgroud)

Ada*_*ppe 5

首先,你甚至不需要一件事:

foreach(key, value; contained) {
   // use right here
}
Run Code Online (Sandbox Code Playgroud)

但是.byKeyValue的东西可以更有效率,所以使用起来很酷......只是根本不指定类型(事实上,你很少需要使用D的foreach,顺便说一句,使用它总是错误auto的foreach声明 - 一个常见的错误,因为它在许多其他地方使用...)

foreach(item; contained.byKeyValue()) {
   writeln(item.key, " ", item.value);
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,void main如果你总是想要main返回,你可以使用0- 语言将自动执行.