Dart 将列表用作地图中的关键点
Dart 将列表用作地图中的关键点,dart,Dart,print({[1,2]:3}[[1,2]])printsnull。这显然出乎意料 是否有一个幸运的解决方法,或者我必须创建一个新的列表,比如类/包装器,并给它一个合适的操作符==和hashCode?这有一个公开的问题:也许 Hashmap有一个构造函数,它接受函数来计算等式和hashCode: HashMap({ 函数bool等于(K键1,K键2), 函数int hashCode(K键), 函数bool isValidKey(potentialKey)}) 您应该知道,当您根据列表中包含的元
print({[1,2]:3}[[1,2]])
printsnull
。这显然出乎意料
是否有一个幸运的解决方法,或者我必须创建一个新的列表,比如类/包装器,并给它一个合适的
操作符==
和hashCode
?这有一个公开的问题:也许
Hashmap有一个构造函数,它接受函数来计算等式和hashCode:
HashMap({
函数bool等于(K键1,K键2),
函数int hashCode(K键),
函数bool isValidKey(potentialKey)})
您应该知道,当您根据列表中包含的元素计算哈希代码并在列表包含在映射中时对其进行修改时,您将再也找不到它了(如您的示例中所示)
Dart中的列表不具有基于其元素的相等性
您可以使用带有自定义相等功能的映射
。
在package:collection/equality.dart
中定义的列表上有一个相等项,因此您可以执行以下操作:
import“package:collection/equality.dart”;
main(){
常量eq=常量ListQuality();
var-map=新映射(等于:eq.equals,hashCode:eq.hash,isValidKey:eq.isValidKey);
map[[1,2]]=42;
印刷品(地图[[1,2]]);
}
不过,这仍然不允许您使用地图文字。Mm,谢谢您的链接。另外,我要指出的是,我完全错过了这个构造函数:我可以传入一些lambda。我也不知道。我想我愿意牺牲一点文字上的便利性。:-)