如何通过索引访问映射键?镖

Rag*_*ngh 7 dart

dartques = {'Color':[], 'Fruits':[], 'Hobbies':[]};
Run Code Online (Sandbox Code Playgroud)

如何使用地图中的索引访问值?我只需要使用索引访问键或值。就像我们在列表中所做的一样
=>list[1]

Har*_*shi 21

要通过索引访问值,有两种方法:

  1. 通过索引获取键并使用键获取值:

     final key = dartques.keys.elementAt(index);
     final value = dartques[key];
    
    Run Code Online (Sandbox Code Playgroud)
  2. 通过索引获取值:

     final value = dartques.values.elementAt(index);
    
    Run Code Online (Sandbox Code Playgroud)

您可以根据地图上存储数据的方式和内容来选择方法。

例如,如果您的地图由包含duplicate值的数据组成,我建议使用第一种方法,因为它允许您key先获取索引,然后再获取该值,这样value您就可以知道该值是否是所需的值。

但是,如果您不关心duplication并且只想根据 Index 查找值,那么您应该使用第二种方法,因为它直接为您提供值。

注意:根据Genchi Genbutsu 的回答,为了方便起见,您还可以使用扩展方法。

重要提示Map:由于dart的默认实现是LinkedHashmap你很幸运。否则,泛型Map因在许多编程语言中不维护顺序而闻名。

如果针对默认为 的任何其他语言询问此问题HashMap,则可能无法回答。


小智 9

你可以这样得到

var element = dartques.values.elementAt(0);
Run Code Online (Sandbox Code Playgroud)

同样对于 Dart 2.7+ 你可以编写扩展函数

extension GetByKeyIndex on Map {
  elementAt(int index) => this.values.elementAt(index);
}

var element = dartques.elementAt(1);
Run Code Online (Sandbox Code Playgroud)


Nas*_*sky 6

您可以使用keysvalues 方法将其转换为两个列表:

var ques = {'Color':['a'], 'Fruits':['b'], 'Hobbies':['c']};
List keys = ques.keys.toList();
List values = ques.values.toList();
print (keys);
print (values);
Run Code Online (Sandbox Code Playgroud)

输出:

[Color, Fruits, Hobbies]
[[a], [b], [c]]
Run Code Online (Sandbox Code Playgroud)

因此keys[0],例如,您可以使用 正常访问它。