磨刀- Dart  List - 图1

声明

  1. var list1 = List();//不限定长度,不限定类型,可添加任意类型
  2. List<dynamic> list2 = List(); //不加泛型的,默认都是dynamic 支持任何类型
  3. List list3 = List(2);///限定长度为2
  4. List<String> list4 = List(); //限定数据为String,加入其它数据会报错
  5. var list5 = [1,2,3];//初始赋值,限定了长度、类型
  6. print(list5[2]);
  7. list5[1] = 100; //可以直接去修改值
  8. print(list5); //[1,100,3

常用属性

  1. List<String> cusList = List();
  2. cusList.add('111');
  3. cusList.add('222');
  4. cusList.add('333');
  5. print(cusList.length); //3
  6. print(cusList.isEmpty);//是否为空
  7. print(cusList.isNotEmpty);
  8. print(cusList.reversed); //(333, 222, 111) //倒叙输出
  9. print(cusList.first); //111
  10. print(cusList.last);//333

常用方法

  1. cusList.add('444');
  2. print(cusList); // [111, 222, 333, 444] 添加
  3. List<String> list7 = List();
  4. list7.add('555');
  5. list7.add('666');
  6. cusList.addAll(list7); //allAll 合并两个list
  7. print(cusList);//[111, 222, 333, 444, 555, 666]

插入

  1. list7.insert(0, '000'); //insert 插入 在第0个位置插入 000
  2. print(list7); //[000, 555, 666]
  3. list7.insertAll(1, ['1','2','3','4']); //insertAll在指定位置插入list ,其余顺延
  4. print(list7); // [000, 1, 2, 3, 4, 555, 666]

合并

  1. Iterable<String> list8 = list7.followedBy(['8','9']); //followedBy 拼接两个数组,返回一个元组
  2. print(list8); // (000, 1, 2, 3, 4, 555, 666, 8, 9)
  3. print(list8.toList()); //转为list [000, 1, 2, 3, 4, 555, 666, 8, 9]
  4. print(list8.toList(growable: false)); //[000, 1, 2, 3, 4, 555, 666, 8, 9]
  5. // growable=false 表示生成的List的长度固定 不可再增加新元素

删除

  1. ///删除
  2. print('list8-->$list8');
  3. List<String> list9 = List();
  4. list9.add('1');
  5. list9.add('2');
  6. list9.add('3');
  7. list9.add('4');
  8. list9.add('5');
  9. list9.add('6');
  10. list9.remove('1'); //删除元素 //[2, 3, 4]
  11. print(list9);
  12. list9.removeAt(0); //根据索引删除 [3, 4, 5, 6]
  13. print(list9);
  14. list9.removeLast(); //删除最后一个元素 [3, 4, 5]
  15. print(list9);
  16. list9.removeRange(0,2); //删除一定的范围(从0开始到2-1 , 顾头不顾尾) [5]
  17. print(list9);
  18. list9.removeWhere((element){ //根据条件删除, 删除元素值为5的元素
  19. return element=="5";
  20. });
  21. list9.clear(); //清空数组
  22. print(list9); // []

修改替换

  1. List<String> list10 = List();
  2. list10.add('0');
  3. list10.add('1');
  4. list10.add('2');
  5. list10.add('3');
  6. list10.add('4');
  7. list10.add('5');
  8. list10.add('6');
  9. list10[1] = '123'; //直接修改指定位置的值
  10. print(list10); //[0, 123, 2, 3, 4, 5, 6]
  11. list10.setRange(0, 3, ['456','789','000']); //修改指定范围的值,顾头不顾尾. [n,m,value] n到m-1
  12. print(list10); //[456, 789, 000, 3, 4, 5, 6]
  13. list10.replaceRange(0, 3, ['0','1','2']); //替换指定范围的值,和setRange一样
  14. print(list10); //[0, 1, 2, 3, 4, 5, 6]
  15. list10.fillRange(0, 3,'100'); // 0 - 3 每个元素用value替换
  16. print(list10); //[100, 100, 100, 3, 4, 5, 6]
  17. list10.setAll(1, ['111','222','333']); //从索引看是,使用list内的元素逐个替换原list中的元素
  18. print(list10); //[100, 111, 222, 333, 4, 5, 6]

查询

  1. List<int> list11 = List();
  2. list11.add(1);
  3. list11.add(2);
  4. list11.add(3);
  5. list11.add(4);
  6. list11.add(5);
  7. list11.add(6);
  8. list11.add(7);
  9. list11.add(8);
  10. list11.add(9);
  11. list11.add(10);
  12. List<String> list12 = List();
  13. list12.add('a');
  14. list12.add('b');
  15. list12.add('c');
  16. list12.add('d');
  17. list12.add('e');
  18. list12.add('f');
  19. list12.add('g');
  20. list12.add('h');
  21. list12.add('i');
  22. list12.add('j');
  23. print(list11[5]);//查看指定索引位置的值 //6
  24. print(list12.elementAt(5)); //获取指定索引位置的元素 // f
  25. print(list11.first);//查看第一个元素
  26. print(list11.last); //查看最后一个元素
  27. int index1 = list12.indexOf('f'); //默认0开始查找,返回指定元素的索引
  28. print(index1); // 5
  29. int index2 = list12.indexOf('b',4); //从索引4开始查找指定元素,如果存在返回元素索引,否则返回-1
  30. print(index2); //-1
  31. int index3 = list12.lastIndexOf('i',1); //从后往前查找. 从指定索引位置,开始往前找,找不到返回 -1 .默认是list.count
  32. print(index3); // 8
  33. list11.retainWhere((element) => (element > 4)); //根据条件保留元素
  34. print(list11); //[5, 6, 7, 8, 9, 10]
  35. bool result = list12.any((element)=>(element=='f'));//判断list中元素是否有任何一个元素满足条件.如果有返回true,否则返回false
  36. print(result); //true
  37. bool reslut1 = list11.every((element) => (element>0));//判断list中每个元素是否都符合条件
  38. print(reslut1); //true
  39. bool reslut2 = list11.every((element) => (element%2==0));
  40. print(reslut2); //false
  41. list12.contains('f');//是否存在某个元素
  42. int result3 = list11.firstWhere((element) => (element>4)) ;//返回第一个满足条件的元素
  43. print(result3); // c
  44. //返回第一个满足条件的元素,不满足返回orElse的值
  45. int result4 = list11.firstWhere((element) => (element>115),orElse: ()=>(100));
  46. print(result4);

遍历

  1. //forEach: 遍历每个元素,此时不可add或remove,否则报错,但可以修改元素值
  2. list11.forEach((element){
  3. list11[4] = 1026;
  4. });
  5. print(list11); //[5, 6, 7, 8, 1026, 10]
  6. for (var value in list11){
  7. print(value);
  8. }
  9. //map: 遍历list中的每一个元素,并处理返回一个新的Iterable可迭代类型
  10. Iterable<String> reslut5 = list11.map((element)=>(element>100?'a':'b'));
  11. print(reslut5); //(b, b, b, b, a, b)
  12. //fold:根据现有的List和给定的initValue,指定一个参数函数规则,对List每个元素做操作,并将结果返回。
  13. int result6 = list11.fold(2, (a,element)=>(a*element)); //
  14. print(result6);

Set

在 Dart 中,set 是一个无序的,元素唯一的集合。 因为一个 set 是无序的,所以无法通过下标(位置)获取 set 中的元素。

  1. var ingredients = Set();
  2. ingredients.addAll(['gold', 'titanium', 'xenon']);
  3. assert(ingredients.length == 3);
  4. // 添加一个重复的元素是无效的。
  5. ingredients.add('gold');
  6. assert(ingredients.length == 3);
  7. // 从 set 中移除一个元素。
  8. ingredients.remove('gold');
  9. assert(ingredients.length == 2);

交集

交集 是另外两个 set 中的公共元素组成的 set 。

  1. var ingredients = Set();
  2. ingredients.addAll(['gold', 'titanium', 'xenon']);
  3. // 创建两个 set 的交集。
  4. var nobleGases = Set.from(['xenon', 'argon']);
  5. var intersection = ingredients.intersection(nobleGases);
  6. assert(intersection.length == 1);
  7. assert(intersection.contains('xenon'));