推荐使用线上编辑器 dartpad.cn 或者 dartpad.dev 进行学习,测试~

Dart 中的集合类,允许以各种方式将元素分组,并定义各种使这些元素更容易操作的方法。本文,我们来认识相关的集合类。

集合的作用

集合有以下的作用:

  • 对数据进行组织
  • 简单快捷搜索大数量的数目
  • 有的集合提供了排序的元素,可以在序列中快速插入或者删除元素
  • 有的集合提供了映射接口,可以快速查找元素
  • Dart 中的集合

    Dart 中重要有以下的集合:

  • List :存储一组不唯一且按插入顺序排序的对象,可以操作索引(可以理解为 JavaScript 中的数组) - Set :存储一组唯一且无序的对象(可以理解为字典)
  • Map key - value 键值对的形式存储数据, key 是唯一的(可以理解为 JavaScript 中操作的键值对)
  • List 集合

    List 是一组有序元素的集合,数据元素可以不唯一。

    List 中的常用属性有

    属性 描述
    length List 的长度
    reversed 反转 List
    isEmpty 判断 List 是否为空
    isNotEmpty 判断 List 是否不为空
    void main() {
      handleList();
    void handleList() {
      // 元素可重复,比如:叫 'Jimmy' 的人不止一个
      List list = ['Jimmy', 'Kimmy', 'Timmy', 'Jimmy'];
      print(list); // [Jimmy, Kimmy, Timmy, Jimmy]
      print(list.length); // 4
      // 反转后并没有影响原 list
      List newList = list.reversed.toList(); 
      print(newList); // [Jimmy, Timmy, Kimmy, Jimmy]
      print(list[2]); // Timmy
      print(newList[2]); // Kimmy
      print(list.isEmpty); // false
      print(list.isNotEmpty); // true
    

    List 中的常用方法有

    方法描述
    add增加一个元素
    addAll拼接数组
    indexOf返回元素的索引,没有则返回 -1
    remove根据传入具体的删除元素
    removeAt根据传入具体的索引删除元素
    insert(index, value)根据索引位置插入元素
    insertAll(index, list)根据索引位置插入 List
    toList()其他类型转换成 List
    join()List 元素拼接起来
    split()将字符串按照指定的方式拆分并转换成 List
    map遍历 List 元素,如果符合条件返回 true,否者返回 false
    where查找 list 中满足条件的元素

    相关示范代码:

    void main() {
      handleList();
    void handleList() {
      List list = ['Jimmy', 'Kimmy'];
      print(list); // [Jimmy, Kimmy]
      list.add('Timmy');
      print(list); // [Jimmy, Kimmy, Timmy]
      list.addAll(['Jimmy', 'Kimmy']);
      print(list); // [Jimmy, Kimmy, Timmy, Jimmy, Kimmy]
      List reversedList = list.reversed.toList();
      print(reversedList); // [Kimmy, Jimmy, Timmy, Kimmy, Jimmy]
      // 返回的是查找到的第一元素的位置
      print(list.indexOf('Jimmy')); // 0
      // 移除的是查找到的第一个元素
      print(list.remove('Jimmy')); // true
      print(list); // [Kimmy, Timmy, Jimmy, Kimmy]
      print(list.removeAt(0)); // Kimmy
      print(list); // [Timmy, Jimmy, Kimmy]
      list.insert(0, 'Ivy');
      print(list); // [Ivy, Timmy, Jimmy, Kimmy]
      list.insertAll(0, ['Jimmy', 'Kimmy']);
      print(list); // [Jimmy, Kimmy, Ivy, Timmy, Jimmy, Kimmy]
      String joinList = list.join('-');
      print(joinList); // Jimmy-Kimmy-Ivy-Timmy-Jimmy-Kimmy
      print(list); // [Jimmy, Kimmy, Ivy, Timmy, Jimmy, Kimmy]
      List newList = joinList.split('-');
      print(newList); // [Jimmy, Kimmy, Ivy, Timmy, Jimmy, Kimmy]
      print(list.map((item) => item == 'Jimmy')); // (true, false, false, false, true, false)
      print(list.where((item) => item == 'Jimmy')); // (Jimmy, Jimmy)
    

    List 遍历

    List 集合遍历的方法有三种:

  • for 循环遍历,通过下标获取元素
  • for...in 循环遍历,直接获取每个元素
  • forEach 循环遍历,直接获取每个元素
  • void main() {
      List list = ['Jimmy', 'Kimmy'];
      // for 循环
      for(var i = 0; i < list.length; i++) {
        // 通过下标去访问元素
        print(list[i]);
        // Jimmy
        // Kimmy
      // for...in 循环
      for(var item in list) {
        print(item);
        // Jimmy
        // Kimmy
      // forEach 循环
      list.forEach((item) {
        print(item);
        // Jimmy
        // Kimmy
    

    Set 集合

    Set 表示对象的集合,每个对象只能出现一次。

    Set 中的常用属性有

    属性描述
    first返回 Set 的第一个元素
    last返回 Set 的最后一个元素
    length返回 Set 的元素个数
    isEmpty判断 Set 是否为空
    isNotEmpty判断 Set 是否不为空
    iterator返回迭代器对象,用于遍历集合
    void main() {
      Set set = Set.from(['Jimmy', 'Ivy']);
      print(set.first); // Jimmy
      print(set.last); // Ivy
      print(set.length); // 2
      print(set.isEmpty); // false
      print(set.isNotEmpty); // true
      print(set.iterator); // Instance of '_CompactIterator<dynamic>'
    

    Set 中的常用方法有

    方法描述
    add添加一个元素
    addAll添加一些元素
    toString转换字符串形式
    join以指定的字符串连接,以字符串形式输出
    contains集合中是否包含指定元素
    containsAll集合中是否包含指定一些元素
    elementAt(index)根据索引返回集合的元素
    remove删除指定的元素
    removeAll删除指定的一些元素
    clear删除所有元素
    void main() {
      Set set = Set.from([]);
      set.add('Jimmy');
      print(set.toString()); // {Jimmy}
      set.addAll(['Ivy', 'Kimmy']);
      print(set.join('-')); // Jimmy-Ivy-Kimmy
      print(set.contains('Timmy')); // false
      print(set.containsAll(['Jimmy', 'Kimmy'])); // true
      print(set.elementAt(1)); // Ivy
      set.remove('Kimmy');
      print(set); // {Jimmy, Ivy}
      set.removeAll(['Jimmy', 'Anonymous']);
      print(set); // {Ivy}
      set.clear();
      print(set); // {}
    

    Set 遍历

    Set 集合遍历的方法有两种:

  • for...in 循环
  • 调用 toList 方法返回一个 List 对象,再用 List 对象的遍历方法操作...
  • void main() {
      Set set = Set.from(['Jimmy', 'Ivy']);
      for(var item in set) {
        print(item);
        // Jimmy
        // Ivy
      set.toList().forEach((item){
        print(item);
        // Jimmy
        // Ivy
    

    Map 集合

    Map 对象就是一个键值对(key - value)。

    Map 中的常用属性有

    属性描述
    hasCode返回集合的哈希码
    isEmpty是否为空
    isNotEmpty是否不为空
    keys返回集合所有的键
    values返回集合所有的值
    length返回集合键值对数
    runtimeType返回对象运行时类型
    void main() {
      Map map = {
        "name": "Jimmy",
        "height": 100
      print(map.hashCode); // 101270140 (每次运行时值都有所改变)
      print(map.isEmpty); // false
      print(map.isNotEmpty); // true
      print(map.keys.toList()); // [name, height]
      print(map.values); // (Jimmy, 100)
      print(map.length); // 2
      print(map.runtimeType); // JsLinkedHashMap<dynamic, dynamic>
    

    Map 中的常用方法有

    方法描述
    toString字符串表示
    addAll添加键值对到集合
    containsKey集合是否包含指定的键
    containsValue集合是否包含指定的值
    remove删除指定键值对
    clear删除所有键值对
    void main() {
      Map map = {
        "name": "Jimmy",
        "height": 100
      print(map.toString()); // {name: Jimmy, height: 100}
      map.addAll({
        "age": 10
      print(map); // {name: Jimmy, height: 100, age: 10}
      print(map.containsKey('name')); // true
      print(map.containsValue('1')); // false
      map.remove('height'); 
      print(map); // {name: Jimmy, age: 10}
      map.clear();
      print(map); // {}
    

    Map 遍历

    Map 集合遍历的方法有两种:

  • forEach 循环
  • for...in 循环
  • void main() {
      Map map = {
        "name": "Jimmy",
        "height": 100
      map.forEach((key, value) {
        print('${key} => ${value}');
        // name => Jimmy
        // height => 100
      for(var key in map.keys) {
        print(map[key]);
        // Jimmy
        // 100
    

    往期精彩推荐

  • Dart 知识点 - 数据类型
  • Flutter 开发出现的那些 Bugs 和解决方案「持续更新... 」
  • 如果读者觉得文章还可以,不防一键三连:关注➕点赞➕收藏

    分类:
    iOS