print({[1,2]:3}[[1,2]])
打印null
。这显然是意料之外的。
是否有一个有福的解决方法或者我是否必须创建一个新的类列表/包装器并为其提供正确的operator==
和hashCode
?
答案 0 :(得分:5)
Dart中的列表没有基于其元素的相等性。
您可以将Map
与自定义相等功能一起使用。
在package:collection/equality.dart
中定义的列表上存在相等性,因此您可以执行以下操作:
import "package:collection/equality.dart";
main() {
const eq = const ListEquality();
var map = new Map(equals: eq.equals, hashCode: eq.hash, isValidKey: eq.isValidKey);
map[[1,2]] = 42;
print(map[[1,2]]);
}
但仍然不允许你使用地图文字。
答案 1 :(得分:1)
这是一个未解决的问题:http://dartbug.com/17963,也许http://dartbug.com/2217
Hashmap有一个构造函数,它接受计算相等性的函数和hashCode:
HashMap({
Function bool equals(K key1, K key2),
Function int hashCode(K key),
Function bool isValidKey(potentialKey)})
您应该知道,当您根据列表中包含的元素计算hashCode并在地图中包含该列表时修改该列表时,您将无法再找到它(如您的示例中所示)