当前位置 : 主页 > 编程语言 > 其它开发 >

Dart 数据类型 - List

来源:互联网 收集:自由互联 发布时间:2022-05-30
List 是一个可索引的集合,相当于JS中的数组。List 可以分为两种:(1)、固定长度的List:尝试修改List长度时会报错(2)、可增长的List:通过字面量方式创建的List默认是可增长的Lis
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
}

 

 

网友评论