Dart中如何判断List<String>?与List<dynamic>的内容是否一致
Dart 判断两个列表内容是否一致(忽略顺序)
实现思路
核心是忽略元素顺序,仅校验元素的种类和出现次数完全匹配,同时兼容List<String>?和List<dynamic>类型,不修改原数据类型。具体步骤:
- 处理空值:若
List<String>?为null,直接判断另一个列表是否为空 - 统一对比标准:将两个列表的元素都转为字符串(适配String类型列表和dynamic类型列表的元素对比)
- 统计元素频次:用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
相关产品推荐
相关产品推荐

