Set trong Dart
1. Giới thiệu
Set là collection chứa các phần tử duy nhất, không có thứ tự.
2. Khai báo Set
void main() {
// Với type annotation
Set<int> numbers = {1, 2, 3};
// Với var
var fruits = {'apple', 'banana', 'orange'};
// Set rỗng
Set<String> empty = {};
var empty2 = <int>{};
}3. Các thao tác cơ bản
void main() {
var numbers = {1, 2, 3};
// Thêm phần tử
numbers.add(4);
numbers.addAll({5, 6});
// Xóa phần tử
numbers.remove(1);
// Kiểm tra
print(numbers.contains(2)); // true
print(numbers.length); // 5
print(numbers.isEmpty); // false
}4. Tính chất duy nhất
void main() {
var numbers = {1, 2, 2, 3, 3, 3};
print(numbers); // {1, 2, 3}
numbers.add(2); // Không thêm được vì đã có
print(numbers); // {1, 2, 3}
}5. Phép toán tập hợp
void main() {
var a = {1, 2, 3, 4};
var b = {3, 4, 5, 6};
// Hợp (Union)
print(a.union(b)); // {1, 2, 3, 4, 5, 6}
// Giao (Intersection)
print(a.intersection(b)); // {3, 4}
// Hiệu (Difference)
print(a.difference(b)); // {1, 2}
}6. Duyệt Set
void main() {
var fruits = {'apple', 'banana', 'orange'};
// for-in
for (var fruit in fruits) {
print(fruit);
}
// forEach
fruits.forEach((f) => print(f));
}7. Chuyển đổi
void main() {
// List -> Set (loại bỏ trùng lặp)
var list = [1, 2, 2, 3, 3, 3];
var set = list.toSet();
print(set); // {1, 2, 3}
// Set -> List
var backToList = set.toList();
print(backToList); // [1, 2, 3]
}8. Set với Object
class Person {
final String name;
Person(this.name);
@override
bool operator ==(Object other) =>
other is Person && other.name == name;
@override
int get hashCode => name.hashCode;
}
void main() {
var people = {Person('Alice'), Person('Alice')};
print(people.length); // 1
}📝 Tóm tắt
- Set chứa phần tử duy nhất
- Hỗ trợ union, intersection, difference
- Chuyển List → Set để loại trùng lặp
- Override == và hashCode cho Object
Last updated on