目录
List
Set
Map
通用方法
Dart2提供了3种核心的集合类型 List(列表)、Set(集合)和Map(映射)。
下面是三种集合类型的使用方法:
List的声明,可以用var也可用List。
// 非固定长度
var testList = List();
// 也可以 List testList = List();
print(testList.length); // 0
// 固定长度
var fixedList = List(2);
print(testList.length); // 2
testList.add("hello");
testList.add(123);
fixedList.add(1); // 报错。固定长度不能添加元素
fixedList[0] = 123;
// 元素类型固定
var typeList = List(); // 只能添加字符串类型的元素
typeList.add("hello"); // 正确
typeList.add(1); // 错误。类型不正确
// 直接赋值
var numList = [1, 2, 3];
numList.add("hello"); // 错误,类型不正确
var dyList = [true, 'hello', 1];
dyList.add(1.2); // 正确
常用的方法,属性,更多内容,可以查阅这个文档
var testList = [1, '2', 3.1];
// length 属性,返回队列长度
print(testList.length); // 3
// isEmpty 属性,返回队列是否为空
print(testList.isEmpty); // false
// 添加元素
testList.add(4);
print(testList); // [1, '2', 3.1, 4]
// 删除元素
testList.remove(3.1);
print(testList); // [1, '2', 4]
// 元素索引. 列表的索引从0开始
print(testList.indexOf(4)); // 2
Set是没有顺序且不能重复的集合,所以不能通过索引去获取值。下面是Set的定义和常用方法。更多的属性方法请参考文档。
var testSet = new Set();
var testSet2 = new Set(2); // 错误,Set没有固定元素的定义
print(testSet.length); // 0
testSet.add(1);
testSet.add(1); // 重复元素无效
testSet.add("a");
print(testSet); // {1, "a"}
print(testSet.contains(1)); // true
testSet.addAll(['b', 'c']);
print(testSet); // (1, 'a', 'b', 'c')
testSet.remove('b');
print(testSet); // (1, 'a', 'c')
映射是无序的键值对。下面是常用的属性和方法。详情的请参考文档。
// 常用的两种定义方式
var testMap = Map();
var testMap2 = {
"a": "this is a",
"b": "this is b",
"c": "this is c"
};
// 长度属性
print(testMap.length); // 0
// 获取值
print(testMap2["a"]); // this is a
// 如果没有key,返回null
print(testMap["a"]); // null
// 需要注意的是keys 和 values 是属性不是方法
print(testMap2.keys); // 返回所有key
print(testMap2.values); // 返回左右value
// key:value 的类型可以指定
var intMap = Map();
// map新增元素
intMap[1] = "Num 1"; // true
intMap['a'] = "Char a:; // 错误,类型不正确。
intMap[2] = "Num 2";
// 删除元素
intMap.remove(2);
// 是否存在key
print(intMap.containsKey(1)); // true
List、Set和Map有一些通用的方法。其中的一些通用方法都是来自于类Iterable。List和Set是iterable类的实现。
虽然Map没有实现Iterable, 但是Map的属性keys和values都是Iterable对象。
// 通用属性 isEmpty和 isNotEmpty
var testSet = Set.from(["a", "b", "c"]);
var testList = [1, 2, 3, 4];
var testMap = Map();
print(testSet.isNotEmpty); // true
print(testList.isEmpty); // false
print(testMap.isEmpty); // true
testMap.addAll({
"zh": "china",
"us": "usa"
});
// forEach方法
testList.forEach((num) => print("I am num ${num}")); // I am num 1 等等
testMap.forEach((k, v) => print("${k} is ${v}")); // zh is china 等等
// iterable提供了 map 方法,来处理每一个集合中的对象,并返回一个结果
var setIter = testSet.map((v) => v.toUpperCase());
print(setIter); // (A, B, C)
// 可以用toList和toSet将结果转换成列表或者集合
var listIter = testSet.map((v) => v.toUpperCase()).toList();
print(listIter); // [A, B, C]
// iterable提供了where方法,来过滤集合中的值,并返回一个集合
var whereList = testList.where((num) => num > 2).toList();
print(whereList); // [3, 4]。如果不用toList()则返回(3, 4)
// iterable提供了any方法和every方法,来判断集合中的值是否符合条件,并返回bool
print(testList.any((num) => num > 2)); // true
print(testList.every((num) => num > 2)); // false