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 中的元素。
// www.javascriptcn.com code example
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 数据结构。