1. Map.entries
- 功能: 返回
Map
的所有键值对,以Iterable<MapEntry<K, V>>
形式表示。 - 使用场景: 当需要遍历
Map
的所有键值对时,可以使用entries
来访问每个MapEntry
对象,方便提取键和值。
示例:
Map<String, String> fruits = {
'a': 'Apple', 'b': 'Banana'};
fruits.entries.forEach((entry) {
print('Key: ${
entry.key}, Value: ${
entry.value}');
});
输出:
Key: a, Value: Apple
Key: b, Value: Banana
2. Map.from
- 功能: 创建一个新的
Map
,并将现有的Map
内容复制过来。 - 使用场景: 当需要复制一个现有的
Map
并进行修改时,可以使用Map.from
。
示例:
Map<String, int> original = {
'apple': 1, 'banana': 2};
Map<String, int> copy = Map.from(original);
copy['orange'] = 3; // 修改复制后的 Map
print(original); // 输出: {apple: 1, banana: 2}
print(copy); // 输出: {apple: 1, banana: 2, orange: 3}
3. Map.addAll
- 功能: 将另一个
Map
的键值对添加到当前Map
。 - 使用场景: 如果有两个
Map
,并且希望将一个Map
的内容添加到另一个Map
中,可以使用addAll
。
示例:
Map<String, int> map1 = {
'a': 1, 'b': 2};
Map<String, int> map2 = {
'c': 3, 'd': 4};
map1.addAll(map2);
print(map1); // 输出: {a: 1, b: 2, c: 3, d: 4}
4. Map.containsKey
和 Map.containsValue
- 功能: 判断
Map
是否包含指定的键或值。 - 使用场景: 当需要检查一个
Map
是否包含某个键或某个值时,可以使用这两个方法。
示例:
Map<String, int> map = {
'apple': 1, 'banana': 2};
print(map.containsKey('apple')); // 输出: true
print(map.containsValue(3)); // 输出: false
5. Map.remove
- 功能: 移除
Map
中指定键的键值对。 - 使用场景: 当需要从
Map
中移除某个键值对时,使用remove
。
示例:
Map<String, int> map = {
'apple': 1, 'banana': 2};
map.remove('apple');
print(map); // 输出: {banana: 2}
6. Map.update
- 功能: 更新
Map
中指定键的值。如果该键不存在,可以插入一个新的键值对。 - 使用场景: 如果需要根据某个键更新值,或者如果键不存在则插入新的键值对,可以使用
update
。
示例:
Map<String, int> map = {
'apple': 1, 'banana': 2};
map.update('apple', (value) => value + 1, ifAbsent: () => 3);
print(map); // 输出: {apple: 2, banana: 2}
7. Map.addEntries
- 功能: 将
MapEntry
的集合添加到Map
中。 - 使用场景: 当需要添加多个键值对时,可以通过
MapEntry
批量添加。
示例:
Map<String, int> map = {
'apple': 1, 'banana': 2};
map.addEntries([
MapEntry('orange', 3),
MapEntry('grape', 4),
]);
print(map); // 输出: {apple: 1, banana: 2, orange: 3, grape: 4}
8. Map.updateAll
- 功能: 更新
Map
中所有元素的值。 - 使用场景: 当需要对
Map
中的每个值进行某种操作时,可以使用updateAll
。
示例:
Map<String, int> map = {
'apple': 1, 'banana': 2};
map.updateAll((key, value) => value * 2);
print(map); // 输出: {apple: 2, banana: 4}
9. Map.forEach
- 功能: 遍历
Map
中的所有键值对。 - 使用场景: 当需要遍历整个
Map
并执行某些操作时,使用forEach
方法。
示例:
Map<String, int> map = {
'apple': 1, 'banana': 2};
map.forEach((key, value) {
print('Key: $key, Value: $value');
});
输出:
Key: apple, Value: 1
Key: banana, Value: 2
10. Map.putIfAbsent
- 功能: 如果
Map
中不存在指定的键,则插入指定的键值对。 - 使用场景: 如果不确定某个键是否已经存在于
Map
中,并希望在不存在的情况下插入一个默认值,可以使用putIfAbsent
。
示例:
Map<String, int> map = {
'apple': 1};
map.putIfAbsent('banana', () => 2);
map.putIfAbsent('apple', () => 3); // 不会替换已有的值
print(map); // 输出: {apple: 1, banana: 2}
11. Map.asMap()
- 功能: 将
List
转换为Map
,其中键为列表元素的索引,值为列表中的元素。 - 使用场景: 当需要将
List
转换为Map
时,可以使用asMap()
,它会将每个列表元素的索引作为键。
示例:
List<String> list = ['apple', 'banana', 'cherry'];
Map<int, String> map = list.asMap();
map.forEach((index, value) {
print('Index: $index, Value: $value');
});
输出:
Index: 0, Value: apple
Index: 1, Value: banana
Index: 2, Value: cherry
12. Map.fromIterable
- 功能: 通过一个可迭代对象(如
List
或Set
)创建一个Map
,可以指定键和值。 - 使用场景: 如果有一个
Iterable
对象并想根据一定的规则构建一个Map
,可以使用fromIterable
。
示例:
List<String> list = ['apple', 'banana', 'cherry'];
Map<int, String> map = Map.fromIterable(
list,
key: (item) => list.indexOf(item), // 使用索引作为键
value: (item) => item, // 使用元素作为值
);
print(map); // 输出: {0: apple, 1: banana, 2: cherry}
总结:
entries
: 用于遍历Map
的键值对,适用于直接操作MapEntry
。asMap()
: 用于将List
转换为Map
,适用于需要根据索引访问列表的情况。addAll
: 用于将另一个Map
的内容添加到当前Map
。containsKey
和containsValue
: 用于判断Map
是否包含指定的键或值。remove
: 用于移除指定键的键值对。update
: 用于更新指定键的值。addEntries
: 用于批量添加多个键值对。updateAll
: 用于更新Map
中所有值。forEach
: 用于遍历整个Map
。putIfAbsent
: 用于插入一个不存在的键值对。fromIterable
: 用于从Iterable
创建一个Map
。
这些方法和属性提供了多种灵活的方式来操作 Map
类型的数据。选择使用哪个方法,取决于要完成的具体任务。