You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么List<Map>调用contains方法检查元素存在时返回false?

原因说明

Dart 的 List.contains() 方法默认使用引用相等判断两个对象是否匹配,而非对比对象的内容值。
你代码中列表内存储的 {"id": "1", "name": "zein"} 和 contains 入参里的同结构 Map 是两个完全独立的实例,在内存中对应不同的存储地址,因此判定为不相等,返回 false。

解决方法

如果需要按内容匹配 Map 是否存在,可选择以下两种常用方案:

  • 手动遍历列表匹配键值:
bool hasTarget = mapList.any((element) => element['id'] == '1' && element['name'] == 'zein');
print(hasTarget); // 输出 true
  • 使用官方 collection 工具包的 Map 值相等判断能力:
import 'package:collection/collection.dart';

const mapEqual = MapEquality();
bool hasTarget = mapList.any((element) => mapEqual.equals(element, {"id": "1", "name": "zein"}));
print(hasTarget); // 输出 true

内容的提问来源于stack exchange,提问作者Subair K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 02:33:00