Dart 集合操作:List、Set、Map 的使用
Dart 提供了三种核心集合类型:List(有序列表)、Set(无重复元素集合)和 Map(键值对映射)。掌握它们的创建、读取、修改和查询方法,是高效编写 Dart 程序的基础。
List:有序可重复的序列
创建 List
// 创建空 List
var numbers = <int>[];
// 或
List<String> names = [];
// 创建带初始值的 List
var fruits = ['apple', 'banana', 'cherry'];
访问与修改元素
-
使用索引读取元素:通过
[index]获取,索引从0开始。print(fruits[0]); // 输出 'apple' -
修改指定位置的值:直接赋值。
fruits[1] = 'orange'; -
添加元素到末尾:调用
add方法。fruits.add('grape'); -
在指定位置插入元素:调用
insert方法。fruits.insert(1, 'mango'); // 在索引 1 处插入 -
删除元素:
- 调用
remove删除第一个匹配项。fruits.remove('banana'); - 调用
removeAt按索引删除。fruits.removeAt(0);
- 调用
常用查询与操作
- 获取长度:
fruits.length - 检查是否为空:
fruits.isEmpty - 遍历所有元素:
for (var fruit in fruits) { print(fruit); } - 转换每个元素:调用
map。var upperFruits = fruits.map((f) => f.toUpperCase()).toList(); - 过滤元素:调用
where。var longNames = fruits.where((f) => f.length > 5).toList();
Set:无序且元素唯一的集合
创建 Set
// 创建空 Set
var uniqueIds = <int>{};
// 或
Set<String> tags = {};
// 创建带初始值的 Set
var colors = {'red', 'green', 'blue'};
添加与删除
-
添加元素:调用
add。若元素已存在,则不重复添加。colors.add('yellow'); colors.add('red'); // 无效,'red' 已存在 -
删除元素:调用
remove。colors.remove('green');
集合运算
-
并集:调用
union。var setA = {1, 2, 3}; var setB = {3, 4, 5}; var unionSet = setA.union(setB); // {1, 2, 3, 4, 5} -
交集:调用
intersection。var intersect = setA.intersection(setB); // {3} -
差集:调用
difference。var diff = setA.difference(setB); // {1, 2}
其他操作
- 检查是否包含某元素:
colors.contains('blue') - 遍历:
for (var color in colors) { print(color); }
Map:键值对的映射结构
创建 Map
// 创建空 Map
var user = <String, dynamic>{};
// 或
Map<int, String> codes = {};
// 创建带初始值的 Map
var person = {
'name': 'Alice',
'age': 30,
'city': 'Beijing'
};
读取与写入
-
通过键读取值:使用
[key]。print(person['name']); // 'Alice' -
设置或更新键值对:直接赋值。
person['age'] = 31; person['email'] = 'alice@example.com'; // 新增 -
删除键值对:调用
remove。person.remove('city');
查询与遍历
- 检查是否包含某个键:
person.containsKey('email') - 检查是否包含某个值:
person.containsValue('Alice') - 获取所有键:
person.keys.toList() - 获取所有值:
person.values.toList() - 遍历键值对:
for (var entry in person.entries) { print('${entry.key}: ${entry.value}'); }
安全读取
-
使用
?[]避免空值错误(返回null而非抛异常):var job = person['job']; // 可能为 null -
提供默认值:使用
??操作符。var country = person['country'] ?? 'Unknown';
常见操作对比表
| 操作 | List | Set | Map |
|---|---|---|---|
| 创建空集合 | <T>[] 或 List<T>() |
<T>{} 或 Set<T>() |
<K, V>{} 或 Map<K, V>() |
| 添加元素 | add(value) |
add(value) |
map[key] = value |
| 删除元素 | remove(value) 或 removeAt(index) |
remove(value) |
remove(key) |
| 检查存在性 | contains(value) |
contains(value) |
containsKey(key) / containsValue(value) |
| 获取数量 | length |
length |
length |
| 是否允许重复 | 是 | 否 | 键唯一,值可重复 |
| 是否保持插入顺序 | 是 | 否(LinkedHashSet 除外) |
是(Dart 默认使用 LinkedHashMap) |
实用技巧
-
从 List 创建 Set 去重:
var list = [1, 2, 2, 3]; var unique = list.toSet().toList(); // [1, 2, 3] -
将 Map 转为 List of Entries:
var entries = map.entries.toList(); -
按条件筛选 Map:
var filtered = map.map((k, v) => v > 10 ? MapEntry(k, v) : null) .removeWhere((k, v) => v == null); // 更简洁方式: var filtered2 = { for (var entry in map.entries) if (entry.value > 10) entry.key: entry.value }; -
合并两个 Map:
var merged = {...map1, ...map2}; // map2 的键会覆盖 map1

暂无评论,快来抢沙发吧!