1.使用类型推导定义

  var list1 = ['a','b','c','d']; //初始就赋值,限定了长度,限定了类型,只能是String
  print('$list1, ${list1.runtimeType}'); //[a, b, c, d], List<String>
  var list3 = ['x','y','z'];
  var list4 = List(); //不限定长度,不限定类型,可添加任意类型的数据
  List list5 = List(); //不限定长度,不限定类型,可添加任意类型的数据
  List list6 = List(2); //限定长度为2  越界会报错,不限定类型,可添加任意类型的数据
  List list7 = ['a',2,'b',false]; //初始化就赋值了,限定了长度,限定了类型,任意位置可用任意类型替换

2.明确指定类型

  List<int> list2 = [1,2,3,4]; //初始就赋值,限定了长度,限定了类型,只能是int
  print("$list2,${list2.runtimeType}"); //[1, 2, 3, 4],List<int>

List 常见属性

print (list1.length); //4 获取list1长度 print (list1.isEmpty); // false 字符串是否为空 print (list1.isNotEmpty);// true 字符串是否不为空 print (list1.reversed); //(d, c, b, a) 返回一个倒序排列的List,不影响原List; print (list1.first); //a 第一个元素 print (list1.last); //d 最后一个元素

List 常用的一些方法

  • add()添加元素
  • addAll()添加List
  •  list1.add('f');
     list2.add(5);
     print('List增加 $list1,$list2'); //List增加 [a, b, c, d, f],[1, 2, 3, 4, 5]
      //在这里会报错 list2 是一个int类型的,他无法加入到一个string的list里面
     //list1.addAll(list2); //Error: The argument type 'List<int>' can't be assigned to the parameter type 'Iterable<String>'.
      list4.add(1);
      list4.add('aaa');
      list4.add(true);
      print(list4); //[1, aaa, true]
     list1.addAll(list3);//点击addAll这个方法进入官方文档可以看到注解:1.将[iterable]的所有对象追加到该列表的末尾;2.根据[iterable]中的对象数量来扩展列表的长度 ; 3. 如果该列表是固定长度的,则抛出[UnsupportedError]
     print('拼接后的List$list1');// +++++++[a, b, c, d, f, x, y, z]
    
  • followedBy()将自身 和参数内的list 元素合并 返回的类型一定是 Iterable
  •   List<String> list8 = ['aa','bb','cc','x','y','z'];
      Iterable<String> list9 = list8.followedBy(['aa','zz']);
      print('合并后的List $list9'); //合并后的List (aa, bb, cc, x, y, z, aa, zz)
    
  • remove() 删除元素
  • list1.remove('a');  //list1 删除a 元素
    print('List指定删除某个元素 $list1'); //List指定删除某个元素 [b, c, d, g, x, y, z, f, x, y, z]
    
  • removeAt() 删除指定下标的元素
  •  //在这里可以看出 下标是从0 开始的
    list1.removeAt(1); // list1 删除下标为1 的元素
    print('List删除下标为1 的元素 $list1');//List删除下标为1 的元素 [b, d, g, x, y, z, f, x, y, z]
    
  • removeLast() 删除最后一个元素
  •  list1.removeLast(); // list 删除最后一个元素
    print('List删除最后一个元素 $list1');//List删除最后一个元素 [b, d, g, x, y, z, f, x, y]
    
  • removeRange() //删除范围内的元素
  •  list1.removeRange(0, 3); //
     print('List 删除 从 0 - 3 的元素 后得到的 $list1');//List 删除 从 0 - 3 的元素 后得到的 [x, y, z, f, x, y]
    
  • contains() 是否包含某个元素
  •  list1.contains(1); //是否包含某个元素,
      print('${list1.contains(1)}');//这里返回false,因为现有的list1 里面只有 x,y  所以返回flase
    
  • removeWhere() 根据条件删除
  •   list1.removeWhere((element) {return element == 'x';});
      list1.removeWhere((element) => element == 'x'); //这里是函数简写
    

    List 中元素重新赋值

     list1[0] = '第一个元素替换';
    print(list1); //[第一个元素替换, z, f, y]
     list12.add(4);
     list12.retainWhere((element) => (element > 2)); //根据条件保留元素
     print(list12);//[3, 4]
    
  • setAll(index,list) 从index开始,使用list内的元素逐个替换本list中的元素
  •   List<int> list13 = List();
      list13.add(0);
      list13.add(1);
      list13.add(2);
      list13.add(3);
      list13.add(4);
      list13.setAll(1, [5,6,7,8]); //从index开始替换,但是替换的List长度不能超过现有List的长度
      print(list13); //[0, 5, 6, 7, 8]
    
  • indexOf(element,[start]) 查找指定元素在list中的索引
  •   List<int> list14 = List();
      list14.add(0);
      list14.add(1);
      list14.add(2);
      list14.add(3);
      list14.add(4);
      list14.add(4);
      int index14 = list14.indexOf(4); //默认从索引0开始查找指定元素,返回指定元素的索引 如果存在多个相同的元素,则返回第一个
      int index141 = list14.indexOf(2,3); //从3 开始查找 2,如果存在返回指定元素索引,反则返回 -1
      print(index14); //4
      print(index141); //-1
    
  • lastIndexOf(element,[start]) 从后往前查找指定元素在list中的索引
  •  List<int> list15 = List();
     list15.add(0);
     list15.add(1);
     list15.add(2);
     list15.add(3);
     list15.add(4);
     int index15 = list15.lastIndexOf(2); 
     int index151 = list15.lastIndexOf(1,4); //从指定索引位置往后查找指定元素的索引位置,查到返回该元素的索引值,没找到返回-1
     print(index15); //2
     print(index151); //1
    
  • elementAt(index) 根据索引值获取元素
  •  List<int> list16 = List();
     list16.add(0);
     list16.add(1);
     list16.add(2);
     list16.add(3);
     list16.add(4);
     var resultList16 = list16.elementAt(3);
     print(resultList16); //3
    
  • any((element) => (bool)) 判断List中是否任意一个元素符合条件赛选
  •  List<int> list17 = List();
     list17.add(1);
     list17.add(2);
     list17.add(3);
     list17.add(4);
     list17.add(5);
     //every((element)=>(bool)) 判断List中是否有元素符合参数函数
     bool resultList17 = list17.any((element) => (element >3));//判断List元素中是否有任意一个元素满足给定的条件,如果满足则返回true,否则返回flase
     print(resultList17); //true
    
  • firstWhere((element) =>(bool)) 返回第一个满足条件的元素
  •  List<int> list18 = List();
     list18.add(1);
     list18.add(2);
     list18.add(3);
     list18.add(4);
     list18.add(5);
     list18.add(1);
     list18.add(2);
      var resultList18 = list18.firstWhere((element) => (element > 2)); //找不到则会报错 Bad state: No element
      print(resultList18); //3
    
  • int lastIndexWhere(bool test(E element), [int start]); 返回第一个满足条件的元素下标,start表示从第几个下标开始查找,不存在则返回-1
  •   List<int> list19 = List();
      list19.add(1);
      list19.add(2);
      list19.add(3);
      list19.add(4);
      list19.add(5);
      var resultList19 = list19.indexWhere((element) => (element >3)); //不存在则返回-1
      var resultList191 = list19.indexWhere((element) => (element > 4),2);
      var resultList192 = list19.lastIndexWhere((element) => (element > 5));
      var resultList193 = list19.lastIndexWhere((element) => (element > 2),1);
      print(resultList19);//3
      print(resultList191);//4
      print(resultList192);//-1
      print(resultList193);//-1
    
  • lastWhere(bool test(E element), {E orElse()}) 从后往前查找,返回第一个满足条件的元素
  •    List<int> list20 = List();
       list20.add(1);
       list20.add(1);
       list20.add(3);
       list20.add(4);
       list20.add(5);
       var resultList20 = list20.lastWhere((element) => element >2);
       var resultList21 = list20.lastWhere((element) => element > 6,orElse:()=>(66));
       print(resultList20); //5
       print(resultList21); //66
    
  • forEach 遍历List中的每个元素 进入文档内查看,forEach方法内部其实也是forIn方法进行遍历
  •   List list21 = List();
      list21.add(1);
      list21.add(2);
      list21.add(3);
      list21.add(4);
      list21.add(5);
      list21.forEach((element) { //遍历时不可以add或remove,但是可以修改element内的值
        element += 1; //这里修改了element的值,但是遍历完,list21里面的值是不变的 
        print(element); //2,3,4,5,6;
        list21[1] = 66;
        list21[2] = 77;
      print(list21); //[1, 66, 77, 4, 5]
      for (var list21Element in list21) {
         print(list21Element); // 1, 66, 77, 4, 5;
    
  • fold(T initialValue, T combine(T previousValue, E element)) 根据现有的List和给定的initialValue,指定一个参数函数规则,对List每个元素做操作,并将结果返回
  •   List<int> list22 = [1,2,3,4,5,6];
      var resultList22 = list22.fold(2, (a, element) => (a * element)); //2 *(1*2*3*4*5*6)
      var resultList221 = list22.fold(2, (a, element) => (a + element)); // 2+(1+2+3+4+5+6)
      print(resultList22);//1440
      print(resultList221);//23
    
  • reduce(E combine(E value, E element)) 用指定的函数对元素做连续操作,将结果返回
  •   List<int> list23 = [1,2,3,4,5,6];
      var resultList23 = list23.reduce((a, b) => (a +b )); //1+2+3+4+5+6
      var resultList231 = list23.reduce((a, b) => (a * b)); //1*2*3*4*5*6
      print(resultList23);//21
      print(resultList231);//720
      //skip(count) 越过count个元素后,开始返回Iterable;
      List<int> list24 = [1,2,3,4,5];
      Iterable<int> resultList24 = list24.skip(2);
      print('$resultList24,${list24.runtimeType}');//(3, 4, 5),List<dynamic>
    
  • skipWhile(bool test(E value)) 根据参数函数,找到第一个不符合条件的元素,然后将其及以后的元素返回,如果都符合就返回一个空List,如果都不符合则全部返回
  •    List list25 = [3,1,2,4,5,6];
       Iterable resultList25 = list25.skipWhile((value) => (value > 1));
       print(resultList25);//[]
    
  • take(int count) 从0 - count 获取元素 并返回
  • takeWhile(bool test(E value)) 从0 开始获取,直至第一个不符合函数的元素,将其前面的元素都返回
  •    List list26 = [2,4,5,6,1];
       var resultList26 = list26.take(2);
       var resultList261 = list26.takeWhile((value) => value > 1.2);
       print('$resultList26,${resultList26.runtimeType}'); //(2, 4),SubListIterable<dynamic>
       print('$resultList261,${resultList261.runtimeType}'); //(2, 4, 5, 6),TakeWhileIterable<dynamic>
    
  • where(bool test(E element)) => WhereIterable(this, test) 根据指定的函数筛选,符合条件的元素组成新的Iterable
  •    List list27 = [3,1,0,5,7];
       Iterable resultList27 = list27.where((element) => element >2);
       print(resultList27); //(3, 5, 7)
    
  • singleWhere(bool test(E element), {E orElse()}) 根据函数找出唯一的元素,如果不唯一,则报错:Too many elements
  •   List list28 = [1,3,2,5,8];
      var resultList28 = list28.singleWhere((element) => (element >7),orElse:()=>(7));
      print(resultList28);//8
    
  • whereType() 从无指定类型的List中,筛选出指定类型的数据
  •   List list29 = [1,9,8,2,7,1.11,'abc'];
      Iterable<int> resultList29 = list29.whereType();
      Iterable<double> resultList291 = list29.whereType();
      Iterable<String> resultList292 = list29.whereType();
      print('$resultList29,$resultList291,$resultList292'); //(1, 9, 8, 2, 7),(1.11),(abc)
    
  • cast() 将List的泛型提升到期祖父类
  •   List<String> list30 = ['aa','bb','cc','dd'];
      List<Object> list31 = list30.cast();
      list31.add('ff');
      print('$list31,${list31.runtimeType}'); //[aa, bb, cc, dd],CastList<String, Object>
    

    expand() 根据现有的List,指定一个规则,生成新的List

     List list32 = [1,4,3,6];
     var resultList32 = list32.expand((element) => ([element +1,element +2]));
     print('$resultList32,${resultList32.runtimeType}'); //(2, 3, 5, 6, 4, 5, 7, 8)  ExpandIterable<dynamic, dynamic>
    
      List list36 = [1,5,6,7,8,8,9,3,8,9,8];
     //  list36.sort();
     //  print(list36); //[1, 3, 5, 6, 7, 8, 8, 8, 8, 9, 9]
      list36.sort((a,b) =>(a>b ? 1:-1));
      print(list36);//[1, 3, 5, 6, 7, 8, 8, 8, 8, 9, 9]
    
  • sublist(int start, [int end]) 截取List 返回截取后的List
  •  List list37 = [2,5,1,7,9,10];
     var result37 =  list37.sublist(2);
     print('$result37,${result37.runtimeType}'); //[1, 7, 9, 10],List<dynamic>
     var result371 = list37.sublist(1,3);
     print('$result371,${result371.runtimeType}'); //[5, 1],List<dynamic>
    
  • getRange(int start, int end) 在List 中截取 start-end 之间
  •  List list38 = [8,9,1,0,3,5];
     var resultList38 = list38.getRange(1, 3);
     print('$resultList38,${resultList38.runtimeType}'); //(9, 1),SubListIterable<dynamic>
    
  • join()拼接字符,返回String类型
  •   List list39 = ['a','cc','fc','xx'];
      var resultList39 = list39.join('-');
      print('$resultList39,${resultList39.runtimeType}'); //a-cc-fc-xx,String
    
  • 清除所有元素 clear();
  •  //清除所有元素 clear()
      List list40 = ['c','b','z'];
      list40.clear(); //清除所有元素  如果是固定长度的则会报异常2
      print('$list40,${list40.runtimeType}'); //[],List<dynamic>
           
    粉丝