一、List

定义

  1. List list = [1,2,3];
  2. List<int> list = [1,2,3]; // 泛型约束
  3. var list = new List(); // 构造函数 (不安全,推荐使用'List.filled' or 'List.generate')
  4. // 创建不可变List
  5. var list2 = const [1,2,3,"Dart",true];

属性

  1. List<int> list = [1,2,3];
  2. print(list[0]); // 索引访问
  3. print(list.length); // 长度
  4. print(list.reversed.toList()); // reversed返回值是Iterable,可通过toList转回为List。
  5. print(list.isEmpty); // 判断List是否为空
  6. print(list.isNotEmpty); // 判断List是否不为空

方法

  1. List list = [1,2,3];
  2. list.indexOf(1); // 返回值为索引;查不到返回-1
  3. list.add(4); // 修改原List;无返回值。
  4. list.addAll([5]); // 修改原List;无返回值。-- 拼接数组
  5. list.remove(1); // 修改原List;返回值为布尔值。 (若有多个相同的具体值,仅删除索引最小的一项)
  6. list.removeAt(1); // 修改原List;返回值为剩余数组的长度。
  7. list.fillRange(0, 2, 0); // 修改原List;无返回值。 (填充覆盖[start,end)内的列为fillValue)
  8. list.insert(0,2); // 修改原List;无返回值。 (指定位置插入单个)
  9. list.insertAll(0,[1,2]); // 修改原List;无返回值。 (指定位置插入多个)
  10. // List与其他类型之间的转换
  11. print(list.toList() is List);
  12. print(list.toString() is String);
  13. print(list.toSet() is Set);
  14. print(list.join('-') is String);
  15. print("鼠标-键盘".split("-") is List);

高级方法

— 参数无index,仅有element — 没有for…of

  1. List<int> list = [1,2,3];
  2. for(var i=0;i<list.length;i++){}
  3. for(var item in list){}
  4. list.forEach((element) {
  5. print(element);
  6. }); // 循环List,无返回值。
  7. list = list.map((element)=>element+1).toList(); // map返回值为Iterable. -- map
  8. list = list.where((element) => element>=3).toList(); // map返回值为Iterable. -- filter
  9. var bSome = list.any((element) => element>=3); // 返回值为布尔值。 -- some
  10. var bEvery = list.every((element) => element>=2); // 返回值为布尔值。 -- every

二、Set

Set是没有顺序且不能重复的的集合 —> 因此不能使用索引值去访问。 — 主要的功能是去除List中重复的内容

  1. var sSet = new Set(); // 不支持参数
  2. sSet.add(1); // 不能添加重复项
  3. print(sSet);
  4. print(sSet.toList() is List);
  5. List list = [1,1,1,2,2,2];
  6. print(list.toSet().toList()); // 连续转化
  7. sSet.addAll(list);
  8. print(sSet.toList()); // 先addAll List,再toList
  9. /// other methods ...

高级方法

— 参数无index,仅有element — 没有for…of

  1. var set1 = new Set();
  2. List<int> list = [1,2,3];
  3. set1.addAll(list);
  4. print(set1.length);
  5. for(var i=0;i<set1.length;i++){} // 不能使用索引值去访问
  6. for(var item in set1){ print(item); }
  7. set1.forEach((element) {
  8. print('$element');
  9. }); // 无返回值。
  10. set1 = set1.map((element)=>element+1).toSet(); // map返回值为Iterable. -- map
  11. set1 = set1.where((element) => element>=3).toSet(); // map返回值为Iterable. -- filter
  12. var bSome = list.any((element) => element>=3); // 返回值为布尔值。 -- some
  13. var bEvery = list.every((element) => element>=2); // 返回值为布尔值。 -- every

三、Map

映射(Maps)是无序的键值对。

定义

  1. Map map1 = {
  2. 'name': 'topaz',
  3. 'age': 20,
  4. };
  5. var map2 = new Map(); // 不支持赋值
  6. map2['name'] = 'topaz1'; // key-value赋值
  7. map2['age'] = 25;

属性

  1. Map map1 = {
  2. 'name': 'topaz',
  3. 'age': 20,
  4. };
  5. print(map1.keys.toList()); // keys和value返回值为Iterable
  6. print(map1.values.toList());
  7. print(map1.isEmpty); // 返回值为布尔值
  8. print(map1.isNotEmpty);

方法

  1. map1['height'] = 178;
  2. map1.addAll({
  3. 'hobby': ['吃'],
  4. });
  5. map1.remove('name');
  6. print(map1.containsKey('age')); // 返回布尔值 -- 是否存在某个key值
  7. /// other methods ...

高级方法

— 参数为key和value — 没有for…of 和for…in

  1. map1.forEach((key, value) {
  2. print('$key -- $value');
  3. });