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