Dart
中的集合类,允许以各种方式将元素分组,并定义各种使这些元素更容易操作的方法。本文,我们来认识相关的集合类。
集合的作用
集合有以下的作用:
Dart 中的集合
Dart
中重要有以下的集合:
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
集合遍历的方法有两种:
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
集合遍历的方法有两种:
void main() { Map map = { "name": "Jimmy", "height": 100
map.forEach((key, value) { print('${key} => ${value}'); // name => Jimmy