• Dart 数据类型 List


    List 是一个可索引的集合,相当于JS中的数组。List 可以分为两种:
    (1)、固定长度的List:尝试修改List长度时会报错
    (2)、可增长的List:通过字面量方式创建的List默认是可增长的
     
     List的两种声明方式
     1、字面量方式
     (1)、List list = []; // 不限定元素的数据类型
     (2)、List list = <int>[]; // 限定元素的数据类型是 int
      // 通过字面量声明List
      List l1 = ['a', 'b', 'c', 1, 2, 3];
      print(l1); // [a, b, c, 1, 2, 3]
      // l1[6] = 'd'; // 下标越界。Invalid value: Not in inclusive range
      l1[5] = 'd';
      l1.add(4);
      l1.addAll([7, 8]);
      print(l1); // [a, b, c, 1, 2, d, 4, 7, 8]
    
      // 限定元素类型的声明方式
      List l2 = <int>[1, 2, 3];
      print(l2); // [1, 2, 3]
      l2.add(4);
      print(l2); // [1, 2, 3, 4]
     
      2、构造函数方式
     (1)、List list = new List.empty(growable: true); // 不限制长度的空列表
     (2)、List list = new List.filled(3, 0); // 声明指定长度的填充列表
      List<dynamic> List.empty({bool growable = false})
      用于创建一个新的空的List,它接受一个布尔值growable,默认值为false,表示创建一个固定长度为0的List;如果取值为true,表示List可增长
    
      List l3 = new List.empty(); 
      // 等价于 List l3 = new list.empty(growable: false);
    
      l3.add(1); // 错误:不能给一个固定长度的List添加元素。Cannot add to a fixed-length list
      List l3 = new List.empty(growable: true);
      l3.add(1); 
      print(l3); // [1]
    
      // 创建一个固定长度和固定内容的List
      List l4 = new List.filled(3, 6);
      print(l4); // [6, 6, 6]
      // l4.add(6); // Cannot add to a fixed-length list

    常用属性

    (1)、长度

      print(l1.length); // 6

    (2)、反转

      print(l1.reversed); // (3, 2, 1, c, b, a)
      print(l1.reversed.toList()); // [3, 2, 1, c, b, a]

    常用方法

    (1)、添加元素(针对可增长的List)

                 void add(dynamic value):添加一个元素到List尾部

                 void addAll(Iterable<dynamic> iterable):把所有的可迭代对象都添加到List尾部

    (2)、检索

        indexOf(dynamic element, [int start = 0])

                   lastIndexOf(dynamic element, [int? start])
      print(l1.indexOf('a')); // 0
      print(l1.indexOf('h')); // -1
      print(l1.lastIndexOf(2)); // 4

    (3)、删除

        bool remove(Object? value)

                dynamic removeAt(int index)

        void removeWhere(bool Function(dynamic) test)
      // 删除元素
      bool result3 = l3.remove(6);
      print(result3); // true
      print(l3); // [1, 4, 5]
    
      // 根据下标删除元素
      dynamic result4 = l3.removeAt(1);
      print(result4); // 4
      print(l3); // [1, 5]
    
      l5.removeWhere((element) => element > 0);
      print(l5); // [0]

    (4)、插入元素到指定的位置

                 void insert(int index, dynamic element)

                 insertAll(int index, Iterable<dynamic> iterable)
      l3.insert(1, 9);
      print(l3); // [1, 9, 5]
      l3.insertAll(1, [3, 3]);
      print(l3); // [1, 3, 3, 9, 5]

    (5)、排序

                 void sort([int Function(dynamic, dynamic)? compare])

      List letters = ['e', 'a', 'f', 'ab'];
      letters.sort((a, b) => a.compareTo(b));
      print(letters); // [a, ab, e, f]

    (6)、合并

                 String join([String separator = ""])

      List words = ['dart', 'flutter'];
      String result5 = words.join('-');
      print(result5); // dart-flutter

    (7)、清空

                 void clear()

      l3.clear();
      print(l3.length); // 0
      print(l3.isEmpty); // true

    遍历方法

    void main() {
      List nums = <int>[1, 2, 3, 4, 5];
    
      // for 循环遍历
      for (int i = 0; i < nums.length; i += 1) {
        print(nums[i]);
      }
    
      // for ... in
      for (int num in nums) {
        print(num);
      }
    
      // forEach
      nums.forEach((element) {
        print(element);
      });
    
      // map() 遍历并处理元素,然后生成新的列表
      dynamic newNums1 = nums.map((e) => e * e);
      dynamic newNums2 = nums.map((e) => e * e).toList();
      print(newNums1); // (1, 4, 9, 16, 25)
      print(newNums2); // [1, 4, 9, 16, 25]
    
      List newNums3 = nums.map((e) => e * e).toList();
      print(newNums3); // [1, 4, 9, 16, 25]
    
      // where() 返回满足条件的数据
      // 判断数字是否是奇数
      bool isOdd(n) => n % 2 == 1;
      List oddNum = nums.where((element) => isOdd(element)).toList();
      print(oddNum); // [1, 3, 5]
    
      // any() 只要有一项满足条件,即返回 true
      // 检测是否有奇数(至少一个)
      bool hasOdd = nums.any((element) => element % 2 == 1);
      print(hasOdd); // true
    
      // every() 判断是否每一项都满足条件,都满足条件才返回true
      // 检测是否都是奇数
      bool isAllOdd = nums.every((element) => element % 2 == 1);
      print(isAllOdd); // false
    
      // expand() 合并:将列表中的所有元素一个接一个地添加到新列表中,通常用于将两个
      // 以上的列表添加在一起
      List str1 = ['dart'];
      List str2 = ['flutter'];
      List str3 = ['webpack'];
      List newStr = [str1, str2, str3].expand((element) => element).toList();
      print(newStr); // [dart, flutter, webpack]
    
      // flod() 折叠:对列表中的每一个元素做累计操作,初始值可以自定义(类似js 的 reduce)
      List<int> numbers = <int>[2, 4, 6, 8];
      int initialValue = 10;
      int result = numbers.fold<int>(
          initialValue, (previousValue, element) => previousValue + element);
      print(result); // 30
    
      // reduce() 对列表中的每一个元素做累计操作,初始值是列表的第一个元素
      int reduceResult = numbers.reduce((value, element) => value + element);
      print(reduceResult); // 20
    }
  • 相关阅读:
    JDBCUtils
    C3P0配置
    反射基本常识(二)
    反射基本常识(一)
    String to Integer (atoi)
    ZigZag Conversion
    Longest Palindromic Substring
    Palindrome Number
    Reverse Integer
    Longest Substring Without Repeating Characters
  • 原文地址:https://www.cnblogs.com/rogerwu/p/16161206.html
Copyright © 2020-2023  润新知