携手创作,一起成长!这是我参加「日新计划 8 月更文挑战」的第14天,点击查看活动概况
推荐运用线上编辑器 dartpad.cn 或许 dartpad.dev 进行学习,测试~
Dart
中的调集类,答应以各种方式将元素分组,并定义各种使这些元素更简略操作的办法。本文,咱们来认识相关的调集类。
调集的效果
调集有以下的效果:
- 对数据进行安排
- 简略快捷查找大数量的数目
- 有的调集供给了排序的元素,能够在序列中快速刺进或许删去元素
- 有的调集供给了映射接口,能够快速查找元素
Dart 中的调集
Dart
中重要有以下的调集:
-
List:存储一组不仅有且按刺进次序排序的目标,能够操作索引(能够理解为
JavaScript
中的数组)
–Set:存储一组仅有且无序的目标(能够理解为字典) -
Map:
key - value
键值对的方式存储数据,key
是仅有的(能够理解为JavaScript
中操作的键值对)
List 调集
List 是一组有序元素的调集,数据元素能够不仅有。
List 中的常用特点有:
特点 | 描绘 |
---|---|
length | List 的长度 |
reversed | 回转 List |
isEmpty | 判别 List 是否为空 |
isNotEmpty | 判别 List 是否不为空 |
void main() {
handleList();
}
void handleList() {
// 元素可重复,比如:叫 'Jimmy' 的人不止一个
List list = ['Jimmy', 'Kimmy', 'Timmy', 'Jimmy'];
print(list); // [Jimmy, Kimmy, Timmy, Jimmy]
print(list.length); // 4
// 回转后并没有影响原 list
List newList = list.reversed.toList();
print(newList); // [Jimmy, Timmy, Kimmy, Jimmy]
print(list[2]); // Timmy
print(newList[2]); // Kimmy
print(list.isEmpty); // false
print(list.isNotEmpty); // true
}
List 中的常用办法有:
办法 | 描绘 |
---|---|
add | 增加一个元素 |
addAll | 拼接数组 |
indexOf | 回来元素的索引,没有则回来 -1 |
remove | 依据传入详细的值删去元素 |
removeAt | 依据传入详细的索引删去元素 |
insert(index, value) | 依据索引方位刺进元素 |
insertAll(index, list) | 依据索引方位刺进 List
|
toList() | 其他类型转化成 List
|
join() | 将 List 元素拼接起来 |
split() | 将字符串按照指定的方式拆分并转化成 List
|
map | 遍历 List 元素,如果契合条件回来 true ,否者回来 false
|
where | 查找 list 中满足条件的元素 |
相关演示代码:
void main() {
handleList();
}
void handleList() {
List list = ['Jimmy', 'Kimmy'];
print(list); // [Jimmy, Kimmy]
list.add('Timmy');
print(list); // [Jimmy, Kimmy, Timmy]
list.addAll(['Jimmy', 'Kimmy']);
print(list); // [Jimmy, Kimmy, Timmy, Jimmy, Kimmy]
List reversedList = list.reversed.toList();
print(reversedList); // [Kimmy, Jimmy, Timmy, Kimmy, Jimmy]
// 回来的是查找到的第一元素的方位
print(list.indexOf('Jimmy')); // 0
// 移除的是查找到的第一个元素
print(list.remove('Jimmy')); // true
print(list); // [Kimmy, Timmy, Jimmy, Kimmy]
print(list.removeAt(0)); // Kimmy
print(list); // [Timmy, Jimmy, Kimmy]
list.insert(0, 'Ivy');
print(list); // [Ivy, Timmy, Jimmy, Kimmy]
list.insertAll(0, ['Jimmy', 'Kimmy']);
print(list); // [Jimmy, Kimmy, Ivy, Timmy, Jimmy, Kimmy]
String joinList = list.join('-');
print(joinList); // Jimmy-Kimmy-Ivy-Timmy-Jimmy-Kimmy
print(list); // [Jimmy, Kimmy, Ivy, Timmy, Jimmy, Kimmy]
List newList = joinList.split('-');
print(newList); // [Jimmy, Kimmy, Ivy, Timmy, Jimmy, Kimmy]
print(list.map((item) => item == 'Jimmy')); // (true, false, false, false, true, false)
print(list.where((item) => item == 'Jimmy')); // (Jimmy, Jimmy)
}
List 遍历:
List
调集遍历的办法有三种:
- for 循环遍历,经过下标获取元素
- for…in 循环遍历,直接获取每个元素
- forEach 循环遍历,直接获取每个元素
void main() {
List list = ['Jimmy', 'Kimmy'];
// for 循环
for(var i = 0; i < list.length; i++) {
// 经过下标去拜访元素
print(list[i]);
// Jimmy
// Kimmy
}
// for...in 循环
for(var item in list) {
print(item);
// Jimmy
// Kimmy
}
// forEach 循环
list.forEach((item) {
print(item);
// Jimmy
// Kimmy
});
}
Set 调集
Set
表明目标的调集,每个目标只能出现一次。
Set 中的常用特点有:
特点 | 描绘 |
---|---|
first | 回来 Set 的第一个元素 |
last | 回来 Set 的最终一个元素 |
length | 回来 Set 的元素个数 |
isEmpty | 判别 Set 是否为空 |
isNotEmpty | 判别 Set 是否不为空 |
iterator | 回来迭代器目标,用于遍历调集 |
void main() {
Set set = Set.from(['Jimmy', 'Ivy']);
print(set.first); // Jimmy
print(set.last); // Ivy
print(set.length); // 2
print(set.isEmpty); // false
print(set.isNotEmpty); // true
print(set.iterator); // Instance of '_CompactIterator<dynamic>'
}
Set 中的常用办法有:
办法 | 描绘 |
---|---|
add | 增加一个元素 |
addAll | 增加一些元素 |
toString | 转化字符串方式 |
join | 以指定的字符串连接,以字符串方式输出 |
contains | 调集中是否包括指定元素 |
containsAll | 调集中是否包括指定一些元素 |
elementAt(index) | 依据索引回来调集的元素 |
remove | 删去指定的元素 |
removeAll | 删去指定的一些元素 |
clear | 删去一切元素 |
void main() {
Set set = Set.from([]);
set.add('Jimmy');
print(set.toString()); // {Jimmy}
set.addAll(['Ivy', 'Kimmy']);
print(set.join('-')); // Jimmy-Ivy-Kimmy
print(set.contains('Timmy')); // false
print(set.containsAll(['Jimmy', 'Kimmy'])); // true
print(set.elementAt(1)); // Ivy
set.remove('Kimmy');
print(set); // {Jimmy, Ivy}
set.removeAll(['Jimmy', 'Anonymous']);
print(set); // {Ivy}
set.clear();
print(set); // {}
}
Set 遍历:
Set
调集遍历的办法有两种:
- for…in 循环
- 调用 toList 办法回来一个 List 目标,再用 List 目标的遍历办法操作…
void main() {
Set set = Set.from(['Jimmy', 'Ivy']);
for(var item in set) {
print(item);
// Jimmy
// Ivy
}
set.toList().forEach((item){
print(item);
// Jimmy
// Ivy
});
}
Map 调集
Map
目标就是一个键值对(key – value)。
Map 中的常用特点有:
特点 | 描绘 |
---|---|
hasCode | 回来调集的哈希码 |
isEmpty | 是否为空 |
isNotEmpty | 是否不为空 |
keys | 回来调集一切的键 |
values | 回来调集一切的值 |
length | 回来调集键值对数 |
runtimeType | 回来目标运转时类型 |
void main() {
Map map = {
"name": "Jimmy",
"height": 100
};
print(map.hashCode); // 101270140 (每次运转时值都有所改动)
print(map.isEmpty); // false
print(map.isNotEmpty); // true
print(map.keys.toList()); // [name, height]
print(map.values); // (Jimmy, 100)
print(map.length); // 2
print(map.runtimeType); // JsLinkedHashMap<dynamic, dynamic>
}
Map 中的常用办法有:
办法 | 描绘 |
---|---|
toString | 字符串表明 |
addAll | 增加键值对到调集 |
containsKey | 调集是否包括指定的键 |
containsValue | 调集是否包括指定的值 |
remove | 删去指定键值对 |
clear | 删去一切键值对 |
void main() {
Map map = {
"name": "Jimmy",
"height": 100
};
print(map.toString()); // {name: Jimmy, height: 100}
map.addAll({
"age": 10
});
print(map); // {name: Jimmy, height: 100, age: 10}
print(map.containsKey('name')); // true
print(map.containsValue('1')); // false
map.remove('height');
print(map); // {name: Jimmy, age: 10}
map.clear();
print(map); // {}
}
Map 遍历:
Map
调集遍历的办法有两种:
- forEach 循环
- for…in 循环
void main() {
Map map = {
"name": "Jimmy",
"height": 100
};
map.forEach((key, value) {
print('${key} => ${value}');
// name => Jimmy
// height => 100
});
for(var key in map.keys) {
print(map[key]);
// Jimmy
// 100
}
}
往期精彩推荐
- Dart 知识点 – 数据类型
- Flutter 开发出现的那些 Bugs 和解决方案「继续更新… 」
如果读者觉得文章还能够,不防一键三连:关注➕点赞➕收藏