不讲理论,代码实践

一、List

API 文档:https://api.dart.dev/dev/2.4.0-dev.0.0/dart-core/List-class.html

常用的几个方法和属性:

  List l1 = ['aaa', 'bbb', 'ccc', 'ddd', 'eee'];
  print(l1.length); // 5
  print(l1.isEmpty); // false
  print(l1.isNotEmpty); // true
  print(l1.reversed); // (eee, ddd, ccc, bbb, aaa)
  print(l1.reversed is List); // false
  print(l1.reversed.toList()); // [eee, ddd, ccc, bbb, aaa]
  print(l1.reversed.toList() is List); // true

需要注意的是 (eee, ddd, ccc, bbb, aaa) 并非 List 类型,只是 Iterable 的,只有 [eee, ddd, ccc, bbb, aaa] 才是 List 类型。

Iterable 转成 List 类型,只需要 xxx.toList() 方法即可。

输出结果:

1.jpg

  List l2 = [1,3,2,6];
  List l3 = [5, 1];
  l2.add(0);
  l2.addAll(l3);
  print(l2); // [1, 3, 2, 6, 0, 5, 1]
  print(l2.indexOf(1)); // 0
  print(l2.indexOf(100)); // -1
  print(l2.remove(1)); // true
  print(l2.remove(100)); // false
  print(l2); // [3, 2, 6, 0, 5, 1]
  print(l2.removeAt(1)); // 2
  print(l2); // [3, 6, 0, 5, 1]
  l2.fillRange(1, 3, 'aaa');
  print(l2); // [3, aaa, aaa, 5, 1]
  l2.insert(1, 'bbbb');
  print(l2); // [3, bbbb, aaa, aaa, 5, 1]
  l2.insertAll(1, ['ccc', 'ddd']);
  print(l2); // [3, ccc, ddd, bbbb, aaa, aaa, 5, 1]
  String str1 = l2.join('-');
  print(str1); // 3-ccc-ddd-bbbb-aaa-aaa-5-1
  print(str1.split('-')); // [3, ccc, ddd, bbbb, aaa, aaa, 5, 1]

字符串与 List 互转与 js 方法一样,分别是 list.join('-')str.split('-')

输出结果:

2.jpg

二、Set

API 文档:https://api.dart.dev/dev/2.4.0-dev.0.0/dart-core/Set-class.html

Set 的子项都是唯一的,List 去重可以先转 Set 再转 List 即可。

  Set s1 = new Set();
  s1.add('aaa');
  s1.add('aaa');
  s1.add('bbb');
  print(s1); // {aaa, bbb}
  print(s1.toList()); // [aaa, bbb]

  List l1 = [1,1,1,1,1];
  print(l1.toSet().toList()); // [1]

输出结果:

3.jpg

三、Map

API 文档:https://api.dart.dev/dev/2.4.0-dev.0.0/dart-core/Map-class.html

  Map m1 = new Map();
  m1['name'] = 'ptbird';
  m1.addAll({"age": 24, "age2": 25});
  print(m1); // {name: ptbird, age: 24, age2: 25}
  print(m1.isNotEmpty); // true
  print(m1.isEmpty); // false
  print(m1.keys); // (name, age, age2)
  print(m1.keys.toList()); // [name, age, age2]
  print(m1.values.toSet()); // {ptbird, 24, 25}
  m1.remove('name');
  print(m1); // {age: 24, age2: 25}
  print(m1.containsKey('name')); // false
  print(m1.containsValue('name')); // false

输出结果:

4.jpg

四、forEach 、 every 、 where、 any 、map

1、forEach

  List l1 = ['a','b','c'];
  for( var i in l1) {
    print(i);
  }
  
  l1.forEach((item) => print(item));
  
  l1.forEach((item) {
    print(item);
  });

输出结果:

5.jpg

2、every

判断每个子项是否满足条件,需要全部满足才会返回 true

  List l1 = [1,2,3];
  var l2;
  l2 = l1.every((item){
    return item > 1;
  });
  print(l2);

输出结果:

6.jpg

3、where

将满足条件的值返回,返回的是 iterable 类型,需要转 set 或者 list 需要调用对应的方法。


  List l1 = [1,2,3];
  var l2;
  l2 = l1.where((item){
    return item > 1;
  });
  print(l2);

输出结果:

7.jpg

4、any

只要有一个子项满足就会返回 true

  List l1 = [1,2,3];
  var l2;
  l2 = l1.any((item){
    return item > 1;
  });

输出结果:

8.jpg

5、map

map 对每个子项都进行处理并且返回,从而生成一个新的 List 或者是 Set

  List l1 = [1,2,3];
  var l2;
  l2 = l1.map((item){
    print(item);
    if(item > 1) {
      return item;
    }
  });
  print(l2);

输出结果:

9.jpg