Day08 | Set、Map 用法与集合遍历详解
·
一、Sets
向已存在的 Set 中添加项目:
void main() {
var elements = <String>{};
// add
elements.add("Nike");
print(elements);
var names = {"张三", "李四", "王五"};
// addAll
elements.addAll(names);
print(elements);
// .length
print(elements.length);
assert(elements == 4);
}
在 Set 变量前面添加 const 关键字创建一个 Set 编译时常量:
void main() {
final names = const {
'张三',
'李四',
'王五',
'Nike',
'高学同',
};
names.add('向天宇'); // error:Cannot change an unmodifiable set
}
Set 是没有顺序且不能重复的集合,所以不能通过索引获取值,主要功能是去除数组重复的内容
构造函数创建 Set 集合
void main() {
// var mySet = new Set();
// mySet.add('樱桃');
// mySet.add('菠萝');
// mySet.add('菠萝');
// print(mySet);
// print(mySet.toList());
List myList = ['樱桃', '菠萝', '椰子', '樱桃', '菠萝', '樱桃', '菠萝'];
var mySet = new Set();
mySet.addAll(myList);
print(mySet);
print(mySet.toList());
}
二、Maps
通常来说,Map 是用来关联 keys 和 values 的对象。其中键和值都可以是任意类型的对象。每个键只能出现一次,但是值可以重复出现。
1、Maps 创建
使用 Map 字面量创建 Map:
void main() {
var gifts = {
// key: value
'first': '小花花',
'second': '大火箭',
'third': '保时捷'
};
print(gifts);
}
使用 Map 构造器创建 Map:
void main() {
var gifts = Map<String, String>();
gifts['first'] = '大别野';
gifts['second'] = '灰太狼';
gifts['third'] = '红太狼';
print(gifts);
}
void main() {
Map person = {'name': 'Cherry', 'age': 16};
print(person);
var myMap = new Map();
myMap['name'] = '高学同';
print(myMap);
}
2、Maps 常用属性
| 属性 | 作用 |
|---|---|
| keys | 获取所有的 key 值 |
| values | 获取所有的 value 值 |
| isEmpty | 是否为空 |
| isNotEmpty | 是否不为空 |
void main() {
Map person = {'name': 'Cherry', 'age': 16, 'gender': '女'};
print(person.keys); // (name, age, gender)
print(person.keys.toList()); // [name, age, gender]
print(person.values); // (Cherry, 16, 女)
print(person.values.toList()); // [Cherry, 16, 女]
print(person.isEmpty); // false
print(person.isNotEmpty); // true
}
3、Maps 常用方法
| 方法 | 作用 |
|---|---|
| addAll({…}) | 合并映射,给映射内增加属性 |
| remove(key) | 删除指定 key 的数据 |
| containsValue | 查看映射内的值,返回 true / false |
void main() {
Map person = {'name': 'Cherry', 'age': 16, 'gender': '女'};
person.addAll({
'job': ['敲代码', '讲课'],
'height': '173cm'
});
print(person); // {name: Cherry, age: 16, gender: 女, job: [敲代码, 讲课], height: 173cm}
print(person.remove('gender')); // 女
print(person); // {name: Cherry, age: 16, job: [敲代码, 讲课], height: 173cm}
print(person.containsValue('Cherry')); // true
print(person.containsValue('Berry')); // false
print(person.containsKey('name')); // true
print(person.containsKey('aaa')); // false
}
三、集合的遍历
1、for、for…in、forEach
for 循环:
void main() {
List fruitList = ['樱桃', '椰子', '菠萝'];
for (var i = 0; i < fruitList.length; i++) {
print(fruitList[i]);
}
}
for…in:
void main() {
List fruitList = ['樱桃', '椰子', '菠萝'];
for (var item in fruitList) {
print(item);
}
}
forEach:
void main() {
// Lists
List fruitList = ['樱桃', '椰子', '菠萝'];
fruitList.forEach((value) {
print("$value");
});
// 箭头函数
fruitList.forEach((value) => print(value));
// Sets
var mySet = new Set();
mySet.addAll([97, 85, 77]);
mySet.forEach((value) {
print(value);
});
mySet.forEach((value) => print(value));
// Maps
Map person = {'name': 'Cherry', 'age': 16};
person.forEach((key, value) {
print("$key---$value");
});
}
注意:箭头函数是一种简写模式,与 JavaScript / TypeScript 中的箭头函数不同的是:Dart 语言中的箭头函数 目前不支持多条语句,也就是说,如果写多条语句,就不可以使用箭头函数的写法
更多推荐
所有评论(0)