List

对于大多数编程语言来说,List是最常用的集合类型了,有些语言叫动态数组。Dart中没有数组类型,因为List已经足够了。声明一个List:

var list = [1, 2, 3];
print(list.runtimeType); //List<int>

Dart会自动推断出集合内的元素类型,而不用我们明确指定。

如果我们往List中放不同类型的话,那Dart会推断出什么类型呢?

var list = ["abc", 2, 3.33];

Dart会智能的将元素类型推断为Object类型:

print(list.runtimeType); //List<Object>

集合的基本操作有这些:

//添加
list.add(11);
list.addAll([2, 3]);
//移除
list.removeAt(2); //如果越界,会报异常
list.remove(2);
list.removeLast();
list.removeRange(0, 2); //移除一段
//获取
list[1];
list.clear(); //清空
list.contains("abc"); //是否包含
list.isEmpty;
//修改
list[0] = "abcde";
list.setRange(0, 2, ['a', 'b', 'c']); //将给定list设置到指定区间内

Dart作为现代化编程语言,它的集合当然也支持高阶函数。高级操作如下:

//遍历
list.forEach((el) {
    print(el);
});
//map操作
var mapList = list.map((el){
    return el * 10;
});
//reduce操作
var reduceList = list.reduce((v, el){
    return v + el;
});
//其他
list.any((el){ return el > 2; }); //只要有一个元素满足给定条件就返回true
list.every((el){ return el > 2; });//所有元素都满足给定条件才返回true
list.removeWhere((el){ return el > 1; }); //移除所有满足条件的
list.fillRange(0, 3, 4); //使用给定值填充指定区间
print(list.reversed); //反转
list.shuffle(Random.secure()); //打乱排序
list.sort((a,b){ return b - a; }); //排序
print(list.join("#"));

创建一个常量值List:

var clist = const [1, 2, 3]; 
clist.add(4); //注意,clist的值是常量值,值的内容不能修改,添加操作会报异常

Set

Set的特点是无序且元素不重复,使用大括号{}表示。

var set = { "a", "b", "b", "c"};
print(set); //{a, b, c}
print(set.runtimeType); //_CompactLinkedHashSet<String>

创建一个空的Set是在大括号前面指定泛型,这个泛型不能缺少:

var emptySet = <String>{}; //泛型一定不能少
var map = {}; //如果缺少了泛型就变成了map了
print(map.runtimeType); //_InternalLinkedHashMap<dynamic, dynamic>

创建一个常量值Set:

var constSet = const {'one', 'two', 'three'}; //constSet的值是一个常量值
constSet.add("four"); //常量值不能修改值的内容,仍然会报异常

其他高级操作就不一一演示了,同List的用法。

Map

Map拥有键值,Dart中创建Map非常简洁明了,借鉴了JavaScript的语法:

var person = {
    'name': "lxj",
    'age': 20
};
print(person.runtimeType);//_InternalLinkedHashMap<String, Object>
var classes = {
    1: '一年级',
    2: '二年级'
};
print(classes.runtimeType);//_InternalLinkedHashMap<int, String>

Map的基本操作如下:

//通过key访问value
print(person['name']);//lxj
//如果key不存在,则为null
print(person['address']);//null
person.remove('name');
person['name'] = '李晓俊';
print(person.length);//2

遍历Map也非常简单:

person.forEach((k,v){
    print("$k => $v");
});

整体来看,Dart的集合操作非常简洁,有动态语言的风格,看起来很像JavaScript。Dart一开始设计时就是为了替代JavaScript,无奈事与愿违;后来阴差阳错通过Flutter开始在移动端市场发力。

更新时间: 4/27/2019, 8:54:35 PM