Dart入门--基础语法(二)——集合类型

Dart 有三种集合类型分别是List,Map,Set

List篇

List 的声明可以用List 也可以用var

指定长度数组

void main()
{
  List<int>alist = new List(5);//指定长度为5,默认元素为null
  //List alist = new List(5);//不指定数据类型
  alist[0] = 21;
  print(alist);
  alist[2] = 20;
  print(alist);
}

可变长数组(类似于C++里的vector)

void main()
{
  List<int>vector = [1,2];//可以不指定数据类型
  print(vector);

  vector.length = 0;
  print(vector);

  vector.add(66);
  print(vector);

  vector[0] = 2;
  print(vector);
  vector.length = 3;//没有这句话会报错
  vector[2] = 77;
  print(vector);
}

void main() {
  var a = new List();
  // List a = new List();
  print(a.length);//0
  a.add(1);
  a.add("hello");

  var b = new List(2);
  print(b.length);//2
  // b.add(1);//报错,固定List不能添加元素

  var c = List<String>();
  c.add("I love music");
  // c.add(666);//报错,类型不符

  //直接赋值
  var d = [1,2,3];
  // d.add("I love piano");//报错,类型不符

  var e = [1,'e',"I am a boy"];
  e.add(3.14);

  
}

一些属性

void main()
{
  List vector = new List();
  //也可以写var vector = new List();
  print(vector.length);
  vector.length = 5;
  vector[0]=1;
  vector[1]=2;
  vector[2]=3;
  vector[3]=4;
  vector[4]=5;
  print(vector);
  vector.remove(2);//删去列表中2这个元素
  print(vector.first);//返回列表第一个元素
  print(vector.last);//返回最后一个元素
  print(vector.isEmpty);//判断是否为空
  print(vector.isNotEmpty);//判断是否不为空
  print(vector.reversed);//返回相反顺序的列表
}

Set篇

我觉得功能和C++里面的Set差不多,自动去重

void main() {
  var a = new Set();
  //var b = new Set(2);//报错,Set没有固定长度的定义
  print(a.length);//0

  a.add(1);
  a.add(1);//重复的是无效的
  a.add("boy");
  print(a);//{1,boy}
  print(a.contains(1));//true

  a.addAll(['x','y']);
  print(a);//{1,boy,x,y}

  a.remove('y');
  print(a);//{1,boy,x}
}

Map篇

我觉得也和C++的Map差不多,也是个映射的概念

void main()
{
  var map1 = new Map();

  var map2 = {
    "a" : "apple",
    "b" : "banana",
    "c" : "civil"
  };//keys-->values
  print(map1.length);
  print(map2.length);

  print(map2["a"]);//apple
  print(map1["a"]);//null

  //keys和values是属性而不是方法
  print(map2.keys);//a,b,c
  print(map2.values);//apple,banana,civil
  
  var map3 = Map<int,String>();//key,value的类型可以指定
  map3[1] = "boy";
  //map3["a"] = "girl";//报错,因为key类型不对
  map3[2] = "girl";
  map3.remove(2);//删除key为2的键值对
  print(map3.containsKey(1));//true

}

补充:List和Map常用的构造和遍历方法

void main(){
  List list = List.generate(3, (index)=>index*2);
  print(list);
  for(int i=0;i<list.length;i++)//list第一种遍历
  {
    print(list[i]);
  }
  for(var o in list)//list第二种遍历
  {
    print(o);
  }
  list.forEach((val){//list的第三种遍历——for-each遍历
    print(val);
  });
  list.removeLast();
  list.removeRange(0,1);
  list.removeAt(2);
  list.insert(2, 5)
  print(list.indexOf(2));


  Map ages = {};
  ages['xiaoming'] = 18;
  ages['xiaohong'] = 16;
  print(ages);
  ages.forEach(pp);//注意括号里边是一个方法而不是普通的参数
  Map reverse_ages = ages.map((k,v){//迭代产生一个颠倒key和value的Map
    return MapEntry(v,k); 
  });
  print(reverse_ages);
  for(var key in ages.keys)//in循环
  {
    print('$key->${ages[key]}');
  }
}
pp(k,v)
{
  print('$k,$v');
}

本文参考博客:https://blog.csdn.net/shanyuu/article/details/82903098

发布了99 篇原创文章 · 获赞 21 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43721423/article/details/94551391