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

Dart中如何判断List<String>?与List<dynamic>的内容是否一致

Dart 判断两个列表内容是否一致(忽略顺序)

实现思路

核心是忽略元素顺序,仅校验元素的种类和出现次数完全匹配,同时兼容List<String>?和List<dynamic>类型,不修改原数据类型。具体步骤:

  1. 处理空值:若List<String>?为null,直接判断另一个列表是否为空
  2. 统一对比标准:将两个列表的元素都转为字符串(适配String类型列表和dynamic类型列表的元素对比)
  3. 统计元素频次:用Map统计每个元素的出现次数,最终对比两个统计Map是否完全一致

代码实现

bool listsHaveSameContent(List<String>? list1, List<dynamic> list2) {
  // 处理list1为空的场景
  if (list1 == null) {
    return list2.isEmpty;
  }
  
  // 统计list1中各元素的出现次数
  final countMap1 = <String, int>{};
  for (final item in list1) {
    countMap1[item] = (countMap1[item] ?? 0) + 1;
  }
  
  // 统计list2中各元素的出现次数(先转成String统一类型)
  final countMap2 = <String, int>{};
  for (final item in list2) {
    final itemStr = item.toString();
    countMap2[itemStr] = (countMap2[itemStr] ?? 0) + 1;
  }
  
  // 严谨对比两个统计Map
  if (countMap1.length != countMap2.length) return false;
  for (final key in countMap1.keys) {
    if (countMap1[key] != countMap2[key]) return false;
  }
  return true;
}

测试验证

  • 场景1:listsHaveSameContent(["1","2","3"], [1,2,3]) → 返回true
  • 场景2:listsHaveSameContent(["1","2","3"], [1,3,2]) → 返回true
  • 场景3:listsHaveSameContent(["1","2","4"], [1,2,3]) → 返回false
  • 场景4:listsHaveSameContent(null, []) → 返回true
  • 场景5:listsHaveSameContent(["5"], [5,5]) → 返回false

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 10:18:32