Dart如何实现PHP array_diff()功能:对比两个Map返回差异项
Dart实现类PHP array_diff的Map比对函数
通用实现代码
Map<K, V> mapDiff<K, V>(Map<K, V> newMap, Map<K, V> oldMap) { final diff = <K, V>{}; newMap.forEach((key, value) { // 旧Map不含该键,或对应值不相等时加入差异结果 if (!oldMap.containsKey(key) || oldMap[key] != value) { diff[key] = value; } }); return diff; }
使用示例
void main() { var post = {"name": "First Name", "views": 30}; var postUpdated = {"name": "Second Name", "views": 30}; var result = mapDiff(postUpdated, post); print(result); // 输出: {name: Second Name} }
补充说明
- 该实现完全对齐PHP
array_diff($newMap, $oldMap)的行为:仅返回新Map中与旧Map存在差异的键值对,保留新值,旧Map有但新Map没有的键不会出现在结果中。 - 如果需要比对嵌套Map、List等复杂结构,默认的
==判断仅比对引用,可修改值比对逻辑,递归调用mapDiff处理嵌套结构即可。
内容的提问来源于stack exchange,提问作者Shams M.Monem
相关产品推荐
相关产品推荐

