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

Flutter如何根据数组元素的name字段值去除重复元素

Flutter 数组按name字段去重实现方案

核心实现逻辑

通过标记已出现的name值,仅保留相同name对应的首个元素,以下提供两种可直接使用的实现方式:

方法1:辅助Set标记法(时间复杂度O(n),性能最优)

// 原始数组定义
List<Map<String, dynamic>> originalList = [
  {'name':'Rameez', 'data': [{'age': 1, 'number': 2}]},
  {'name':'XYZ', 'data': [{'age': 1, 'number': 2}]},
  {'name':'Rameez', 'data': [{'age': 1, 'number': 2}]}
];

// 去重处理
Set<String> existedNames = {};
List<Map<String, dynamic>> uniqueList = originalList.where((element) {
  final name = element['name'] as String;
  if (existedNames.contains(name)) return false;
  existedNames.add(name);
  return true;
}).toList();

执行后uniqueList即为预期的去重结果。

方法2:封装通用扩展方法(适合多场景复用)

如果项目中经常需要按不同字段去重,可封装为Dart扩展方法,降低重复代码:

// 定义通用数组去重扩展
extension ListUniqueExtension<T> on List<T> {
  List<T> uniqueBy<K>(K Function(T element) getKey) {
    final Set<K> existedKeys = {};
    return where((element) {
      final key = getKey(element);
      if (existedKeys.contains(key)) return false;
      existedKeys.add(key);
      return true;
    }).toList();
  }
}

// 调用示例,按name字段去重
final uniqueList = originalList.uniqueBy((item) => item['name'] as String);

补充说明

  • 如果业务场景中name字段可能为空,可调整Set类型为Set<String?>,增加空安全判断即可兼容空值去重
  • 如果需要保留重复name的最后一条记录而非第一条,可先将原数组倒序遍历再处理,最后反转结果即可

内容的提问来源于stack exchange,提问作者rameez khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:57:03