我正在学习如何在Flutter中使用查找,这是我遇到的一个例子。
void main() {
Map<List<String>, String> lookup = {
['foo', 'bar']: 'foobar',
['baz', 'qux']: 'bazqux',
['hello', 'world']: 'helloworld',
};
List<String> key = ['foo', 'bar'];
String? result = lookup[key];
if (result != null) {
print('Result: $result');
} else {
print('No match found for $key');
}
}
但问题是结果是'No match found for ['foo','bar '],尽管代码是正确的。它应该返回'foobar'作为结果,但我不确定问题在哪里以及如何修复它。
5条答案
按热度按时间6tr1vspr1#
根据文档...默认情况下,列表仅与自身相等。https://api.dart.dev/be/180791/dart-core/List/operator_equals.html
oknwwptz2#
问题是Dart如何比较列表的相等性。有关如何比较列表的更多信息,请参见here。但在这里不起作用。
如果你在这里使用它,你会得到这样的结果,因为它们的键是同一个对象
332nm8kg3#
问题是您试图比较新的List
List<String> key = ['foo', 'bar']
和现有的键['foo','bar']
,由于引用不同,它们不相等,因此您需要使两个键的引用指向同一个变量key
示例:
输出:
pw9qyyiw4#
您可以在使用
IterableEquality
的地方使用此函数并测试
您可以查看有关How can I compare Lists for equality in Dart?的更多信息
js81xvg65#
由于声明
key
,这会生成一个新的对象,所以它不会被匹配。为了克服这个问题,你可以使用自定义比较函数来解决这个问题。