Dart 基础语法-数组

4,878 阅读8分钟

1、声明

    var list1 = List();// 不限定长度,不限定类型,可添加任意类型的数据
    List list2 = List();// 不限定长度,不限定类型,可添加任意类型的数据
    List list3 = List(2);//限定了长度为2  越界会报错,不限定类型,可添加任意类型的数据

    list1.add(1);
    list1.add('aaa');
    list1.add(true);
    print(list1);//[1, abc, true]
    var list4 = [1,2,3];//初始就赋值了,限定了长度,限定了类型,只能是int
    var list5 = [2,'3',true];//初始就赋值了,限定了长度,未限定类型,任意位置可用任意类型替换
    List list6 = ['a',2,'b',false];//初始就赋值了,限定了长度,未限定类型,任意位置可用任意类型替换
    list5[1] = 2;
    list5[2] = 'aa';
    print(list5);//[2, 2, aa]
    var list33 = <String>["a","b"];
    List<String> list7 = ['a','b','3'];
    List<String> list8 = new List(2);
    list8[0]=('aaa');
    print(list8);//[aaa, null]

2、常用属性

    List<String> list13 = List();
    list13.add('aaa');
    list13.add('bbb');
    list13.add('ccc');
    print(list13.length);//3    长度
    print(list13.isEmpty);//false      是否为空
    print(list13.isNotEmpty);//true     是否不为空
    print(list13.reversed);//(ccc, bbb, aaa)      返回一个List的倒序排列的Iterable  不改变原List
    print(list13.first);//aaa    第一个元素
    print(list13.last);//ccc    最后一个元素

3、常用方法

1、增

  • 1、add() 添加一个元素到List末尾
    List<String> list9 = List();
    list9.add('aaa');
    list9.add('bbb');
    print(list9);//[aaa, bbb]
  • 2、addAll() 两个List合并
    List<String> list10 = List();
    list10.add('aaa');
    list10.add('bbb');
    List<String> list11 = List();
    list11.add('ccc');
    list11.add('ddd');
    list11.addAll(list10);
    print(list11);//[ccc, ddd, aaa, bbb]
  • 3、insert(index,element) 在指定index处插入值
    List<int> list21 = List();
    list21.add(0);
    list21.add(1);
    list21.add(2);
    list21.add(3);
    print(list21);//[0, 1, 2, 3]
    list21.insert(1, 5);  //指定索引位置 插入值,其余顺延
    print(list21);// [0, 5, 1, 2, 3]
  • 4、insertAll(index,list) 在指定index处插入list 其余顺延
    List<int> list25 = List();
    list25.add(0);
    list25.add(1);
    list25.add(2);
    list25.add(3);
    print(list25);//[0, 1, 2, 3]
    list25.insertAll(1, [5,6,7]);
    print(list25);//[0, 5, 6, 7, 1, 2, 3]
  • 5、followedBy(list) 将自身和参数内list合成一个List
List<int> list = [1,2,3];
Iterable<int> list1 = list.followedBy([4,5]);
print(list1);//(1, 2, 3, 4, 5)

2、删

  • remove(obj) 删除具体的元素
  • removeAt(index) 删除索引位置元素
  • removeLast()删除末尾元素
  • removeRange(start,end) 范围删除
  • removeWhere() 根据条件删除:
  • clear() 清空数组
void removeWhere(bool test(E element));

List<String> list = List();
  list.add("aa");
  list.add("bb");
  list.add("cc");
  list.add("dd");
  list.add("ee");
  list.add("ff");
  //根据条件 筛选,这里表示删除元素值为dd
  list.removeWhere((element){ return element=='dd';}); 
  print(list);//[aa, bb, cc, ee, ff]
  //条件只有一个表达式时,可以用箭头函数简化写法
  list.removeWhere((element)=> element=='cc');

3、改

  • 1、修改指定index位置的值
var list = [2,'3',true];
list[1] = 2;
  • 2、setRange(startIndex,endIndex,list) 范围修改List的值
List<String> list = List();
    list.add('aaa');
    list.add('bbb');
    list.add('ccc');
    list.add('ddd');
    print(list);// [aaa, bbb, ccc, ddd]
    List<String> list1 = List();
    list1.add("111");
    list1.add("222");
    list1.add("333");
    list1.add("444");
    list1.add("555");
    list1.add("666");
    list.setRange(0,3, list1);
    //范围修改,从list1取出0 1 2位置的值,修改list对应0 1 2位置的值,0-3含头不含尾,start和end相同,则不变。
    //start和end任何一个超出list list1的角标 则报错。
    print(list);//[111, 222, ccc, ddd]
  • 3、replaceRange(start,end,list)范围替换 含头不含尾
List<String> list = List();
list.add('aaa');
list.add('bbb');
list.add('ccc');
list.add('ddd');
print(list);// [aaa, bbb, ccc, ddd]
list.replaceRange(0,2,["1","2","3"]);
print(list);//[1, 2, 3, ccc, ddd]
  • 4、fillRange(start,end,value) 从start-end 每个元素用value替换
List<String> list = List();
    list.add('aaa');
    list.add('bbb');
    list.add('ccc');
    list.add('ddd');
    print(list);// [aaa, bbb, ccc, ddd]
    list.fillRange(0,2,"1");
    print(list);//[1, 1, ccc, ddd]
  • 5、retainWhere(()=>(bool)) 根据条件筛选元素
List<String> list = List();
    list.add('aaa');
    list.add('bbb');
    list.add('ccc');
    list.add('ddd');
    print(list);// [aaa, bbb, ccc, ddd]
    list.retainWhere((element)=>(element=="aaa"));
    print(list);//[aaa]
  • 6、setAll(index,list) 从index开始,使用list内的元素逐个替换本list中的元素
List<String> list = List();
    list.add('aaa');
    list.add('bbb');
    list.add('ccc');
    list.add('ddd');
    print(list);// [aaa, bbb, ccc, ddd]
    list.setAll(1,["1","2"]);
    print(list);//[aaa, 1, 2, ddd]

4、查

  • 1、indexOf(element,[start]) 查找指定元素在list中的索引
  • 2、lastIndexOf(obj,index) 从后往前查找,返回第一个的index
  • 3、elementAt(index) 获取指定索引位置的元素
  • 4、any((element)=>(bool)) 判断List中是否有任意一个元素符合给定的参数
List<String> list = List();
    list.add('aaa');
    list.add('bbb');
    list.add('ccc');
    list.add('ddd');
   //判断list元素中是否有任何一个元素满足给定的条件,如果满足返回true 否则false
    bool result = list.any((element)=>(element=="aa"));
    print(result);//false
  • 5、every((element)=>(bool)) 判断List中是否每个元素都符合参数函数
 List<int> list1 = [1, 2, 3, 4, 5];
  //是否每个元素都符合条件   都符合返回true  否则返回false
   bool result1 = list1.every((element)=>(element%2==0));
  • 6、contains(obj) List中是否存在给定的obj
  • 7、firstWhere((element)=>(bool)) 返回第一个满足条件的元素(不是元素的index)
List<int> list1 = [1, 2, 3, 4, 5];
   //返回满足条件的第一个元素
   int result = list1.firstWhere((ele)=>(ele>3));
   print(result);//4
  • 8、lastIndexWhere((e)=>(bool)) 从后向前找 返回第一个满足条件的元素的index
  • 9、lastWhere((e)=>(bool)) 从后往前找,返回第一个满足条件的元素的值(不是index)
  • 10、forEach() List遍历每个元素
List<String> list = List();
    list.add('aaa');
    list.add('bbb');
    list.add('ccc');
    list.add('ddd');
    //遍历每个元素  此时不可add或remove  否则报错 但可以修改元素值
    list.forEach((ele){
      print(ele);
    });
  
  for(var x in list){
    print(x);
  }
  • 11、map() 遍历现有List的每个元素,并做处理,返回一个新的Iterable
List<int> list = [1,2,3];
  Iterable<String> list1 = list.map((ele)=>(ele>2?"a":"b"));
  print(list1);//(b, b, a)
  • 12、fold(initValue,(preValue,element)=>()); 根据现有的List和给定的initValue,指定一个参数函数规则,对List每个元素做操作,并将结果返回。
List<int> list = [1,2,3];
  int result = list.fold(2,(a,ele)=>(a*ele));
  print(result);//12
  • 13、reduce((a,b)=>(某种操作)) 用指定的方法对元素做连续操作,将结果返回
List<int> list = [1,2,3];
  int result = list.reduce((a,b)=>(a+b));
  print(result);//6
  • 14、skip
    • skip(count)越过count个元素后,开始返回list的Iterable
    • skipWhile((e)=>(bool)) 根据参数函数,找到第一个不符合条件的元素,然后将其及其后的元素返回
List<int> list = [3, 4, 5, 2, 1];
  //越过count个元素后,开始返回list的Iterable
  Iterable<int> result = list.skip(2);
  print(result);//(5, 2, 1)
  
  //从第一个元素开始,逐个判断是否符合参数函数,直至第一个不符合的元素,将其及其后面的元素返回
  Iterable<int> result1 = list.skipWhile((e)=>(e>2));
  print(result1.toList());//[2, 1]
  • 15、take
  • take(count) 从0开始取count个元素,并返回结果
  • takeWhile((e)=>(bool)) 从0开始取,直至第一个不符合函数的元素,将其前面的元素都返回。
List<int> list = [3, 4, 1, 2, 5];
  //从0开始取2个元素  并返回
   Iterable<int> result = list.take(2);
   print(result);//(3, 4)
  
   //从第一个元素开始,逐个判断是否符合参数函数,直至第一个不符合的元素,将其前面元素都返回
   Iterable<int> result1 = list.takeWhile((e)=>(e>2));
   print(result1);//(3, 4)
  • 16、where
1、where((e)=>(bool) 根据指定参数函数筛选每个元素,符合条件的元素组成一个新的Iterable

List<int> list = [3, 4, 1, 2, 5,2,3,6];
    //根据参数函数筛选
    Iterable<int> result = list.where((e)=>(e>2));
    print(result);//(3, 4, 5, 3, 6)

2singleWhere((e)=>(bool>) 找到那唯一满足条件的元素
 
 List<int> list = [3, 4, 1, 2, 5];
  //找到那唯一满足条件的元素,如果没有满足条件的元素或有多个元素满足条件,就返回orElse方法的返回值,如果没有传入orElse则报错。
    int result = list.singleWhere((e)=>(e>4),orElse: ()=>(10));
   print(result);//5
 
 
3whereType() 从无指定泛型的List中,筛选出指定类型的数据。 
List list = [3, 4, "a",true,"b",5,false];
    //从混合类型的List中,筛选出指定类型的数据
    Iterable<int> result = list.whereType();
  
    print(result);//(3, 4, 5)
    Iterable<String> result1 = list.whereType();
    print(result1);//(a, b)
    Iterable<bool> result2 = list.whereType();
    print(result);//(true, false)


  • 17、expand() 根据现有的List,指定一个规则,生成一个新的List
 List<int> list = [1, 2, 3, 4, 5];
    //通过对元素操作,返回一组指定规则的新的集合
    Iterable<int> result = list.expand((element)=>([element+1,element+2]));
    print(result);//(2, 3, 3, 4, 4, 5, 5, 6, 6, 7)
  • 18、toSet() 将List转为Set 去除后面重复的元素
List<int> list = [3, 4, 1, 2, 5,2,3,6];
    //将list转为set,将后面重复的都去掉
    Set<int> result = list.toSet();
    print(result);//{3, 4, 1, 2, 5, 6}
  • 19、asMap() 将list转为map
List<String> list = List();
    list.add("aaa");
    list.add("bbb");
    list.add("ccc");
    list.add("ddd");
    list.add("eee");
   print(list);// [aaa, bbb, ccc, ddd, eee]
    Map<int,String> map = list.asMap();//list转为map  key为index  value为list的值
   print(map);//{0: aaa, 1: bbb, 2: ccc, 3: ddd, 4: eee}
 
  • 20、sort() List自身排序
List<int> list20 = List();
    list20.add(2);
    list20.add(3);
    list20.add(1);
    list20.add(0);
//    print(list20);//[2, 3, 1, 0]
    list20.sort((a,b)=>(a>b?1:-1));//自身排序  修改本身的list
//    print(list20);//[0, 1, 2, 3]
  • 21、sublist(start,[end]) 从指定index 截取list
List<int> list21 = List();
    list21.add(0);
    list21.add(1);
    list21.add(2);
    list21.add(3);
    print(list21);//[0, 1, 2, 3]
    list21.insert(1, 5);  //指定索引位置 插入值,其余顺延
    print(list21);// [0, 5, 1, 2, 3]
    List<int> list22 = list21.sublist(1);//从指定索引截取List
    List<int> list23 = list21.sublist(1,3);//从指定索引截取List  含头不含尾
    print(list22);//[5, 1, 2, 3]
    print(list23);//[5, 1]
  • 22、getRange(start,end) 从list中截取start-end范围内的数据
List<int> list28 = List();
    list28.add(0);
    list28.add(1);
    list28.add(2);
    list28.add(3);
    list28.add(4);
    list28.add(5);
    list28.add(6);
    list28.add(7);
//    print(list28);//[0, 1, 2, 3, 4, 5, 6, 7]
    Iterable<int> list29 = list28.getRange(2, 5);//含头不含尾,从2开始到5(不含)结束的一个Iterable
//    print(list29);//(2, 3, 4)
  • 23、join("-") 用指定的字符将List中每个元素都连接起来,返回一个字符串
    List<int> list50 = [3, 4, 1, 2, 5];
    String result24 = list50.join("-");//用指定的字符将每个元素都连接起来,返回一个字符串
//    print(result24);//3-4-1-2-5