Set 是一种无序且不重复的数据结构。在 Dart 中,Set 可以用来存储一系列唯一的值。下面将详细介绍 Dart Set 的一些常用方法和属性。
添加元素
add(element)
向 Set 中添加一个元素。如果元素已经存在,则不会发生任何变化。
void main() { var set = <String>{}; set.add("apple"); set.add("banana"); print(set); // 输出: {apple, banana} set.add("apple"); // 由于 "apple" 已经存在,所以不会被再次添加 print(set); // 输出: {apple, banana} }
addAll(iterable)
向 Set 中添加一个可迭代对象中的所有元素。如果这些元素中有重复的,那么只会添加一次。
void main() { var set = <String>{"apple", "banana"}; set.addAll(["banana", "orange"]); print(set); // 输出: {apple, banana, orange} }
删除元素
remove(element)
从 Set 中移除指定的元素。如果元素不存在,则不会发生任何变化。
void main() { var set = <String>{"apple", "banana", "orange"}; set.remove("banana"); print(set); // 输出: {apple, orange} set.remove("grape"); // 由于 "grape" 不存在,所以不会被移除 print(set); // 输出: {apple, orange} }
removeAll(iterable)
从 Set 中移除可迭代对象中的所有元素。
void main() { var set = <String>{"apple", "banana", "orange"}; set.removeAll(["apple", "grape"]); print(set); // 输出: {banana, orange} }
removeWhere(predicate)
根据提供的谓词函数移除符合条件的所有元素。
void main() { var set = <int>{1, 2, 3, 4, 5}; set.removeWhere((element) => element % 2 == 0); print(set); // 输出: {1, 3, 5} }
检查元素
contains(element)
检查 Set 中是否包含指定的元素。
void main() { var set = <String>{"apple", "banana", "orange"}; bool containsApple = set.contains("apple"); print(containsApple); // 输出: true bool containsGrape = set.contains("grape"); print(containsGrape); // 输出: false }
containsAll(iterable)
检查 Set 中是否包含可迭代对象中的所有元素。
void main() { var set = <String>{"apple", "banana", "orange"}; bool containsAll = set.containsAll(["apple", "banana"]); print(containsAll); // 输出: true }
获取元素数量
length
获取 Set 中的元素数量。
void main() { var set = <String>{"apple", "banana", "orange"}; int count = set.length; print(count); // 输出: 3 }
遍历元素
forEach(function)
对 Set 中的每个元素执行指定的函数。
void main() { var set = <String>{"apple", "banana", "orange"}; set.forEach((fruit) => print(fruit)); // 输出: // apple // banana // orange }
forElement(element)
虽然 Dart Set 没有直接提供 forElement
方法,但你可以使用 forEach
或者循环来遍历 Set 中的元素。
// javascriptcn.com 代码示例 void main() { var set = <String>{"apple", "banana", "orange"}; set.forEach((fruit) { if (fruit == "banana") { print("Found $fruit!"); } }); // 输出: Found banana! }
转换和操作
toList()
将 Set 转换为 List。
void main() { var set = <String>{"apple", "banana", "orange"}; List<String> list = set.toList(); print(list); // 输出: [apple, banana, orange] }
intersection(otherSet)
返回一个新的 Set,它包含两个 Set 的交集。
void main() { var setA = <int>{1, 2, 3, 4}; var setB = <int>{3, 4, 5, 6}; var intersectionSet = setA.intersection(setB); print(intersectionSet); // 输出: {3, 4} }
union(otherSet)
返回一个新的 Set,它包含两个 Set 的并集。
void main() { var setA = <int>{1, 2, 3, 4}; var setB = <int>{3, 4, 5, 6}; var unionSet = setA.union(setB); print(unionSet); // 输出: {1, 2, 3, 4, 5, 6} }
difference(otherSet)
返回一个新的 Set,它包含两个 Set 的差集。
void main() { var setA = <int>{1, 2, 3, 4}; var setB = <int>{3, 4, 5, 6}; var differenceSet = setA.difference(setB); print(differenceSet); // 输出: {1, 2} }
排序和查找
sorted()
虽然 Dart Set 本身没有排序功能,但你可以先将其转换为 List 然后进行排序。
void main() { var set = <int>{3, 1, 4, 2}; List<int> sortedList = set.toList()..sort(); print(sortedList); // 输出: [1, 2, 3, 4] }
lookup(element)
查找 Set 中是否存在指定的元素,并返回该元素。如果元素不存在,则返回 null。
void main() { var set = <String>{"apple", "banana", "orange"}; String? found = set.lookup("banana"); print(found); // 输出: banana found = set.lookup("grape"); print(found); // 输出: null }
其他方法
clear()
清空 Set 中的所有元素。
void main() { var set = <String>{"apple", "banana", "orange"}; set.clear(); print(set); // 输出: {} }
isEmpty
检查 Set 是否为空。
void main() { var set = <String>{"apple", "banana", "orange"}; bool empty = set.isEmpty; print(empty); // 输出: false set.clear(); empty = set.isEmpty; print(empty); // 输出: true }
isNotEmpty
检查 Set 是否不为空。
void main() { var set = <String>{"apple", "banana", "orange"}; bool notEmpty = set.isNotEmpty; print(notEmpty); // 输出: true set.clear(); notEmpty = set.isNotEmpty; print(notEmpty); // 输出: false }
以上是 Dart Set 的常用方法和属性介绍。通过这些方法,可以有效地管理和操作 Set 数据结构。