我有一个类:
class MyClass {
MyClass(this.id, this.name);
final int id;
final String name;
}
然后将类添加到Map中,并包含一些额外的信息:
Map<MyClass, String> myMap = {
MyClass(0, "Hello") : "First",
MyClass(1, "World!") : "Second"
};
然后我有一些回调函数:
function doMagic(MyClass thisOne) {
String? value = myMap[thisOne];
}
现在应该可以正常工作了,如果您使用的是相同的Object...但实际上thisOne
是从数据库中重新创建的,因此与myMap中的对象不同,因此不匹配。
我能想到的唯一方法就是:
function doMagic(MyClass thisOne) {
List<MyClass> matchItem = myMap.keys.where((my) => my.id == thisOne.id).toList();
String? value;
if(matchItem.isNotEmpty) {
value = myMap[matchItem[0]];
}
}
我确信我在某个地方读到过关于检查对象的Map的问题,因为这个问题(它正在寻找相等的示例而不是内容)。有更简单的方法吗?
1条答案
按热度按时间2wnc66cl1#
感谢@Richard Heap…
答案是提供==操作符覆盖和hashCode覆盖,然后允许Map []操作符使用其中之一来进行值相等比较。
现在,这工作正常: