本教程展示了多个例子,说明如何在Dart和Flutter编程中比较两个map是否相等。

- 在Dart和Flutter中比较两个地图是否相等
- 在dart和flutter中检查嵌套地图的相等比较
map包含键和值对。
如果两个地图是相等的,那么它应该满足以下几点
- 两个地图中的键和值对是相等的
- 两个地图的长度是相等的
- 键和值的顺序也不重要。
如何在Dart中检查地图是否相等?
有多种方法来比较两个地图是否相等
-
使用集合
MapEquality集合模块提供MapEquality equals()方法来比较两个普通的地图,并返回true或false。它不支持深度嵌套的地图结构。
下面是一个示例代码
import 'package:collection/collection.dart';
void main() {
Map map1 = {'id': 1, 'name': 'john'};
Map map2 = {'id': 2, 'name': 'eric'};
Map map3 = {'id': 1, 'name': 'john'};
print(MapEquality().equals(map1, map2)); // false
print(MapEquality().equals(map1, map3)); // true
if (MapEquality().equals(map1, map2)) {
print('map are equal');
} else {
print('map are not equal');
}
}
输出:
false
true
map are not equal
类似地,你也可以用DeepCollectionEquality().equals() 方法来做。
import 'package:collection/collection.dart';
void main() {
Map map1 = {'id': 1, 'name': 'john'};
Map map2 = {'id': 2, 'name': 'eric'};
Map map3 = {'id': 1, 'name': 'john'};
print(DeepCollectionEquality().equals(map1, map2)); // false
print(DeepCollectionEquality().equals(map1, map3)); // true
if (DeepCollectionEquality().equals(map1, map2)) {
print('map are equal');
} else {
print('map are not equal');
}
}
输出:
false
true
map are not equal
- 使用quiver集合
在dart中,quiver包是一个用于收集实用的可重用函数的库。
它有一个mapsEqual 函数,可以比较两个地图,如果相等则返回真,否则不相等。
语法:
bool mapsEqual(Map? a, Map? b)
它需要两个地图来比较键和值是否相等 返回值:真或假。
下面是一个示例代码
import 'package:quiver/collection.dart';
void main() {
Map map1 = {'id': 1, 'name': 'john'};
Map map2 = {'id': 2, 'name': 'eric'};
Map map3 = {'name': 'john', 'id': 1};
print(mapsEqual(map1, map2)); //false
print(mapsEqual(map1, map3)); //true
if (mapsEqual(map1, map2)) {
print('map1 and map2 are equal');
} else {
print('map1 and map2 are not equal');
}
}
如何在Flutter中检查地图是否相等
flutter/foundation.dart 有一个 mapEquals方法,对地图中的每个元素key和value对进行比较,并返回布尔类型的相等比较结果。
bool mapEquals<T>(Map<T>? a, Map<T>? b)
- true。如果两个地图是相等的,忽略元素的顺序,返回true。
- false:两张地图不相等。
这里,比较两个地图,如果两个地图相等,则返回true。
下面是一个地图相等的例子
import 'package:flutter/foundation.dart';
void main() {
Map map1 = {'id': 1, 'name': 'john'};
Map map2 = {'id': 2, 'name': 'eric'};
Map map3 = {'id': 1, 'name': 'john'};
print(mapEquals(map1, map2)); // false
print(mapEquals(map1, map3)); // true
if (mapEquals(map1, map2)) {
print('map are equal');
} else {
print('map are not equal');
}
}
如何在dart和flutter中比较嵌套地图是否相等?
这个例子检查两个嵌套地图是否相等。 在这个例子中:
-
创建了两个嵌套的地图。
-
首先使用
MapEquality().equals()检查两个地图的比较。它返回false,因为它只检查了地图结构的一个层次。 -
DeepCollectionEquality().equals()检查嵌套地图并比较两个地图,如果嵌套地图相等,则返回真,否则返回假
import 'package:collection/collection.dart';
void main() {
Map map1 = {
'role': {'name': 'sales', 'id': 1}
};
Map map2 = {
'role': {'name': 'admin', 'id': 2}
};
Map map3 = {
'role': {'name': 'sales', 'id': 1}
};
print(MapEquality().equals(map1, map2)); // false
print(MapEquality().equals(map1, map3)); // false
print(DeepCollectionEquality().equals(map1, map2)); // false
print(DeepCollectionEquality().equals(map1, map3)); // true
if (DeepCollectionEquality().equals(map1, map2)) {
print('nested map are equal');
} else {
print('nested map are not equal');
}
}
输出:
false
false
false
true
nested map are not equal
结论
在本教程中,学习了如何在Dart和flutter编程中对两个地图和嵌套地图进行比较和平等。