Dart2基础(二) - List、Set和Map

目录

List

Set

Map

通用方法


Dart2提供了3种核心的集合类型 List(列表)、Set(集合)和Map(映射)。

下面是三种集合类型的使用方法:

  • List

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是没有顺序且不能重复的集合,所以不能通过索引去获取值。下面是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')
  • Map

映射是无序的键值对。下面是常用的属性和方法。详情的请参考文档。

// 常用的两种定义方式
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

 

你可能感兴趣的:(dart2,教程)