文章目录

Dart 集合操作:List、Set、Map 的使用

发布于 2026-04-02 19:33:26 · 浏览 7 次 · 评论 0 条

Dart 集合操作:List、Set、Map 的使用

Dart 提供了三种核心集合类型:List(有序列表)、Set(无重复元素集合)和 Map(键值对映射)。掌握它们的创建、读取、修改和查询方法,是高效编写 Dart 程序的基础。


List:有序可重复的序列

创建 List

// 创建空 List
var numbers = <int>[];
// 或
List<String> names = [];

// 创建带初始值的 List
var fruits = ['apple', 'banana', 'cherry'];

访问与修改元素

  1. 使用索引读取元素:通过 [index] 获取,索引从 0 开始。

    print(fruits[0]); // 输出 'apple'
  2. 修改指定位置的值:直接赋值。

    fruits[1] = 'orange';
  3. 添加元素到末尾调用 add 方法。

    fruits.add('grape');
  4. 在指定位置插入元素调用 insert 方法。

    fruits.insert(1, 'mango'); // 在索引 1 处插入
  5. 删除元素

    • 调用 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'};

添加与删除

  1. 添加元素调用 add。若元素已存在,则不重复添加。

    colors.add('yellow');
    colors.add('red'); // 无效,'red' 已存在
  2. 删除元素调用 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'
};

读取与写入

  1. 通过键读取值:使用 [key]

    print(person['name']); // 'Alice'
  2. 设置或更新键值对:直接赋值。

    person['age'] = 31;
    person['email'] = 'alice@example.com'; // 新增
  3. 删除键值对调用 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

实用技巧

  1. 从 List 创建 Set 去重

    var list = [1, 2, 2, 3];
    var unique = list.toSet().toList(); // [1, 2, 3]
  2. 将 Map 转为 List of Entries

    var entries = map.entries.toList();
  3. 按条件筛选 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
    };
  4. 合并两个 Map

    var merged = {...map1, ...map2}; // map2 的键会覆盖 map1

评论 (0)

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

扫一扫,手机查看

扫描上方二维码,在手机上查看本文