【问题标题】:HashMap no instance keyHashMap 没有实例键
【发布时间】:2020-05-02 08:49:29
【问题描述】:

我的代码有什么问题?

widget.woList 是这个数据类型List<HashMap<int, ABC>>()

for (var i in widget.woList) {
  print(i.toString());
}

通过打印上面的代码,我得到了

  {5838: ABC(pid: 84201,userId: 545)}

但当我只想获取密钥 (print(i.key.toString());) 时,出现以下错误:

Class '_HashMap<int, ABC>' has no instance getter 'key'.
Receiver: Instance of '_HashMap<int, ABC>'
Tried calling: key

【问题讨论】:

标签: dart hashmap key


【解决方案1】:

我认为您还需要遍历 HashMap:

for (HashMap<int, ABC> i in list) {
  i.forEach((key, value) {
    print(key.toString());
    print(value.toString());
  });
}

确保在 for 中使用 HashMap&lt;int, ABC&gt; 拼写“i”变量,以便从 IDE 中获取自动完成功能。

【讨论】:

【解决方案2】:

分析器应该在您的情况下给出错误,因为Map 不包含名称为key 的任何属性。相反,名称是keys,它在映射中返回一个 Iterable 键: https://api.dart.dev/stable/2.8.1/dart-core/Map/keys.html

一个映射可以包含多个键,但如果您知道映射中只有一个键,您可以执行以下操作:i.keys.first.toString()。但如果有多个键,则需要循环遍历它们。

我建议您在使用 Dart 编程时在 IDE 中使用自动完成功能并使用分析器。通过使用 SDK 提供的工具,可以更轻松地浏览每个类中的属性和方法以及文档。而且由于 Dart 可以自动识别大量变量的类型,您甚至可以使用 IDE 识别每个变量的类型,甚至无需运行程序。

【讨论】:

  • 你知道如何根据值对 hashMap 进行排序吗?
  • HashMap 是无序的“迭代映射的键、值或条目(通过 forEach)可能以任何顺序发生。迭代顺序仅在修改映射时发生变化”:api.dart.dev/stable/2.8.1/dart-collection/HashMap-class.html
  • 你的意思是如何以有序的方式迭代地图中的键?因为如果您使用keys.toList() 将键作为列表获取并在此列表上调用sort() 并在从映射中获取值时使用排序列表进行迭代,这是可能的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多