Flutter(Dart)的集合类型List、Set 和 Map
在 Dart(以及 Flutter)中,List
、Set
和 Map
是三种常用的集合类型,用于存储和管理多个数据项。每种类型都有其独特的特性和适用场景。下面将详细介绍这三种集合类型及其常用方法。
1. List (列表)
List
是一种有序的集合,允许重复元素,并且可以通过索引访问每个元素。它是最常用的集合类型之一,适用于需要保持元素顺序或频繁随机访问的情况。
创建 List
// 使用构造函数创建空列表
List<String> emptyList = List.empty(growable: true);
// 使用字面量语法创建列表
List<int> numbers = [1, 2, 3, 4, 5];
// 使用生成器创建列表
List<int> generatedNumbers = List.generate(5, (index) => index * 2);
常用方法
add(element)
: 向列表末尾添加一个元素。addAll(iterable)
: 将多个元素添加到列表末尾。remove(element)
: 移除列表中的指定元素(第一个匹配项)。removeAt(index)
: 根据索引移除元素。clear()
: 清空列表中的所有元素。contains(element)
: 检查列表是否包含某个元素。indexOf(element)
: 返回首次出现的元素索引,若不存在则返回 -1。lastIndexOf(element)
: 返回最后一次出现的元素索引。sublist(start, [end])
: 返回列表的一个子集。reversed
: 返回反转后的迭代器。sort([compare])
: 对列表进行排序,可选提供比较函数。where((element) => condition)
: 过滤出符合条件的元素。map((element) => transform)
: 对每个元素应用转换函数并返回新列表。expand((element) => iterable)
: 展开每个元素为多个元素。fold(initialValue, (previousValue, element) => nextValue)
: 累加计算。reduce((value, element) => value)
: 类似于fold
,但不需要初始值。forEach((element) => action)
: 对每个元素执行操作。any((element) => test)
: 判断是否有任何元素满足条件。every((element) => test)
: 判断所有元素是否都满足条件。firstWhere((element) => test, {orElse})
: 查找第一个满足条件的元素,如果找不到可以提供默认值。lastWhere((element) => test, {orElse})
: 查找最后一个满足条件的元素,如果找不到可以提供默认值。singleWhere((element) => test, {orElse})
: 查找唯一一个满足条件的元素,如果找不到或找到多个会抛出异常。
示例代码
void main() {
List<int> numbers = [1, 2, 3, 4, 5];
// 添加元素
numbers.add(6);
print(numbers); // 输出: [1, 2, 3, 4, 5, 6]
// 移除元素
numbers.remove(3);
print(numbers); // 输出: [1, 2, 4, 5, 6]
// 排序
numbers.sort();
print(numbers); // 输出: [1, 2, 4, 5, 6]
// 过滤
List<int> evenNumbers = numbers.where((number) => number % 2 == 0).toList();
print(evenNumbers); // 输出: [2, 4, 6]
}
2. Set (集合)
Set
是一种无序的集合,不允许重复元素。它非常适合用来去除重复项或进行集合运算(如并集、交集、差集等)。
创建 Set
// 使用构造函数创建空集合
Set<String> emptySet = Set<String>();
// 使用字面量语法创建集合
Set<int> uniqueNumbers = {1, 2, 3, 4, 5};
// 使用生成器创建集合
Set<int> generatedUniqueNumbers = Set.from(List.generate(5, (index) => index * 2));
常用方法
add(element)
: 添加一个元素(不会重复)。addAll(iterable)
: 添加多个元素。remove(element)
: 移除指定元素。clear()
: 清空集合。contains(element)
: 检查集合是否包含某个元素。union(other)
: 返回两个集合的并集。intersection(other)
: 返回两个集合的交集。difference(other)
: 返回当前集合减去另一个集合的结果。lookup(element)
: 查找元素,如果不存在则返回null
。forEach((element) => action)
: 对每个元素执行操作。map((element) => transform)
: 对每个元素应用转换函数并返回新集合。where((element) => condition)
: 过滤出符合条件的元素。
示例代码
void main() {
Set<int> setA = {1, 2, 3};
Set<int> setB = {3, 4, 5};
// 并集
Set<int> unionSet = setA.union(setB);
print(unionSet); // 输出: {1, 2, 3, 4, 5}
// 交集
Set<int> intersectionSet = setA.intersection(setB);
print(intersectionSet); // 输出: {3}
// 差集
Set<int> differenceSet = setA.difference(setB);
print(differenceSet); // 输出: {1, 2}
}
3. Map (映射表)
Map
是键值对的集合,其中每个键都是唯一的。它非常适合用来表示关联数组或字典结构的数据。
创建 Map
// 使用构造函数创建空映射表
Map<String, int> emptyMap = Map<String, int>();
// 使用字面量语法创建映射表
Map<String, int> ages = {'Alice': 30, 'Bob': 25, 'Charlie': 35};
// 使用生成器创建映射表
Map<int, String> daysOfWeek = Map.fromIterable(
['Monday', 'Tuesday', 'Wednesday'],
key: (item) => ['Monday', 'Tuesday', 'Wednesday'].indexOf(item),
value: (item) => item,
);
常用方法
containsKey(key)
: 检查映射表是否包含特定键。containsValue(value)
: 检查映射表是否包含特定值。putIfAbsent(key, () => value)
: 如果键不存在,则插入键值对。remove(key)
: 移除指定键及其对应的值。keys
: 获取所有键的可迭代对象。values
: 获取所有值的可迭代对象。entries
: 获取键值对的可迭代对象。forEach((key, value) => action)
: 对每个键值对执行操作。map((key, value) => entry)
: 对每个键值对应用转换函数并返回新的映射表。update(key, (value) => updatedValue, {ifAbsent})
: 更新现有键的值,如果键不存在可以提供默认值。clear()
: 清空映射表中的所有键值对。
示例代码
void main() {
Map<String, int> ages = {'Alice': 30, 'Bob': 25, 'Charlie': 35};
// 添加或更新键值对
ages['David'] = 28;
print(ages); // 输出: {'Alice': 30, 'Bob': 25, 'Charlie': 35, 'David': 28}
// 移除键值对
ages.remove('Bob');
print(ages); // 输出: {'Alice': 30, 'Charlie': 35, 'David': 28}
// 遍历映射表
ages.forEach((name, age) {
print('$name is $age years old.');
});
// 输出:
// Alice is 30 years old.
// Charlie is 35 years old.
// David is 28 years old.
}
总结
List
、Set
和 Map
是 Dart 中非常重要的集合类型,各自具有不同的特性和使用场景:
List
:适合需要保持元素顺序或频繁随机访问的情况。Set
:适合用来去除重复项或进行集合运算。Map
:适合用来表示关联数组或字典结构的数据。
原文地址:https://blog.csdn.net/Joe0217/article/details/145141177
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!