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

迭代D中关联数组中的键/值对。,d,D,我不知道为什么我在网上找不到答案。这似乎是一件很简单的事情 关联数组有一个byValue成员和一个byKey成员,用于迭代值和键。还有一个byKeyValue成员用于迭代键/值对。只是不清楚使用foreach进行迭代时返回的类型,编译器抱怨auto在这里不够好 语言docs()称之为“不透明类型” 你知道如何让注释过的代码工作吗?谢谢大家! int main(){ int[string] contained; contained["foo"] = 4; contained["bar

我不知道为什么我在网上找不到答案。这似乎是一件很简单的事情

关联数组有一个
byValue
成员和一个
byKey
成员,用于迭代值和键。还有一个
byKeyValue
成员用于迭代键/值对。只是不清楚使用
foreach
进行迭代时返回的类型,编译器抱怨
auto
在这里不够好

语言docs()称之为“不透明类型”

你知道如何让注释过的代码工作吗?谢谢大家!

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
,这是一个常见的错误,因为它在许多其他地方都使用过…)


另外,如果您总是希望
main
返回
0
,您也可以使用
void main
——该语言将自动执行该操作。

因此,首先,您甚至不需要任何东西:

foreach(key, value; contained) {
   // use right here
}
但是.byKeyValue可以更有效,所以使用它很酷。。。只是根本不需要指定类型(事实上,您很少需要使用D的foreach,顺便说一句,在foreach语句中使用
auto
,这是一个常见的错误,因为它在许多其他地方都使用过…)


另外,如果您总是希望
main
返回
0
,也可以使用
void main
——该语言将自动执行该操作。

谢谢!与广告完全一样。有趣的后续报道。显然,返回类型是显式隐藏的,以封装来自用户空间的类型。在D维基上有一个关于它的部分()谢谢!与广告完全一样。有趣的后续报道。显然,返回类型是显式隐藏的,以封装来自用户空间的类型。在D wiki()上有一个关于它的部分