Contents
Chào mừng bạn đến với Fx Studio. Chuyến du lịch với ngôn ngữ lập trình Dart sẽ tiếp tục với chủ đề về Collections Type. Kiểu dữ liệu lần này sẽ là Set Type, hay còn gọi là tập hợp. Và có thể bạn rất ít sử dụng chúng, nhưng nó cũng đóng một phần quan trọng trong cấu trúc dữ liệu.
Nếu bạn chưa biết về List Type, đây cũng là một kiểu dữ liệu Collections trong Dart. Thì bạn có thể tham khảo bài viết này. Còn nếu mọi việc đã ổn rồi, thì …
Bắt đầu thôi!
Chuẩn bị
Về mặt công cụ editor thì khá đơn giản:
- TextEditor
- Visual Studio Code (nên dùng)
Hoặc bạn vào trang https://dartpad.dev/ để tiến hành code luôn. Khá là giống với Playground của Swift.
Về mặt lý thuyết, nếu bạn chưa biết gì về Dart, thì có thể theo dõi lại các bài viết trong series Dart Tour nhóe.
Set type
Chúng ta sẽ bắt đầu khám phá khái niệm về Set type trong Dart trước nhóe!
Set cũng là một kiểu cấu trúc dữ liệu tập hợp.
Nhưng các phần tử trong tập hợp là duy nhất. Ta có một số đặc tính riêng của Set như sau:
- Là tập hợp mà mỗi phần tử tồn tại trong đó là duy nhất
- Các phần tử có cùng kiểu dữ liệu
- Thứ tự các phần tử không ảnh hưởng và không quan trong. Set luôn duy trì một thứ tự đặc biết dựa theo giá trị của các phần tử.
index
trong Set không có ý nghĩa- Set có tốc độ truy cập & xử lý nhanh hơn List. Đặt biệt với các dữ liệu lớn
- Ta có thể sử dụng các phép toán logic trên Set
Chúng ta sẽ bắt đầu tìm hiểu Set type thông qua các ví dụ sau.
Create Set
Đầu tiên, chúng ta khám phá việc tạo một đối tượng Set type nhóe. Để tạo một Set, bạn sử dụng toán tử {}
. Các giá trị của tập hợp sẽ được đặt vào trong 2 dấu đó. Ví dụ như sau:
final Set<int> someSet = {}; //or final someSet = <int>{};
Trên là 2 cách bạn tạo một Set trong Dart.
- Cách 1 là bạn khai báo một tập hợp với kiểu dữ liệu là
Set<int>
. Kiểu dữ liệu các phần tử trong tập hợp làint
. Sau đó, bạn gán bằng một tập hợp rỗng{}
- Cách 2 là bạn tạo ra một biến trước. Sau đó, gán cho biến đó bằng việc khởi tạo một đối tượng tập hợp với generic type là
int
Hoặc bạn có thể tạo ra một tập hợp bằng cách khai báo một biến và gán bằng set literal. Xem ví dụ code nhoé!
final anotherSet = {1, 2, 3, 1}; print(anotherSet); // {1, 2, 3}
Mặc dù, bạn cố tình cho 2 lần giá trị 1
vào trong set literal. Tuy nhiên, kết quả print ra sẽ chỉ có 1 giá trị 1
mà thôi.
Operations
Tiếp theo, chúng ta sẽ khám phá các toán tử được dùng trong Set type. Ta sẽ có một số toán tử cơ bản cho Set như sau. À, ta sử dụng someSet
và anotherSet
làm ví dụ minh hoạ luôn nhoé.
- Checking the contents
Đầu tiên, bạn là kiểm tra xem một phần tử nào đó có trong tập hợp của chúng ta hay là không. Ví dụ như sau:
print(anotherSet.contains(1)); // true
print(anotherSet.contains(999)); // false
Bạn sử dụng toán tử .contains()
để kiểm tra nhoé. Cũng đơn giản thôi. EZ Game!
- Adding single elements
Cũng tương tự như với List, bạn sử dụng toán tử .add
để thêm một phần tử vào tập hợp. Ví dụ như sau:
someSet.add(22);
someSet.add(7);
someSet.add(22);
print(someSet); // {22, 7}
Khi bạn .add
2 lần 1 giá trị, thì Set sẽ nhận một cái thôi. Kết quả in ra thì như trên.
- Removing elements
Lại cũng tương tự như List, bạn sử dụng toán tử .remove
để xoá đi một phần tử trong tập hợp. Xem ví dụ code nha.
someSet.remove(7);
- Adding multiple elements
Khi bạn chán việc theo 1 cái phần tử lần lượt rồi. Và khi bạn muốn thêm nhiều phần tử, thì sử dụng toán tử .addAll
. Tham số truyền vào là một danh sách. Xem ví dụ code sau.
someSet.addAll([1, 2, 3, 4]);
Và nếu trong danh sách kia, có phần tử nào trùng lặp với các phần tử trong tập hợp thì nó không được thêm vào.
Logic Operations
Ta sẽ có 2 phép logic cơ bản cho Set, đó là giao (Intersections) và hợp (Unions).
- Intersections
Ta sẽ có tập hợp là giao của 2 tập hợp, thì tập hợp đó sẽ có các phần tử chung cho 2 tập hợp kia. Bạn sẽ sử dụng toán tử .intersection()
để thực hiện phép giao này. Xem ví dụ code nhoé.
final setA = {8, 2, 3, 1, 4};
final setB = {1, 6, 5, 4};
final intersection = setA.intersection(setB);
print(intersection); //{1, 4}
Vì {1, 4}
đều có trong cả 2 setA
& setB
. Nên khi sử dụng toán tử .intersection
. Thì kết quả trả về là một tập hợp với giá trị là {1, 4}
.
- Unions
Phép hợp sẽ tạo nên một tập hợp mới, bao gồm các phần tử của cả hai tập hợp. Bạn sẽ sử dụng toán tử .union()
để thực hiện việc này. Xem ví dụ nhoé.
final union = setA.union(setB);
print(union);
// {8, 2, 3, 1, 4, 6, 5}
Phép hợp này đại diện cho tất cả các phần tử từ cả hai tập hợp. Hãy nhớ rằng:
Các tập hợp không có yêu cầu phải theo thứ tự.
Other operations
Cũng giống như List, Set type cũng có các toán tử như List về mặt ý nghĩa và cách sử dụng. Nên mình sẽ liệt kê ra thôi.
- collectionif
- collectionfor
- for-in loops
- forEach loops
- spread operators
Phần này, bạn từ tìm ví dụ và thử nghiệm chúng nhóe. Ahihi!
Tạm kết
- Khái niệm về kiểu dữ liệu tập hợp trong Dart
- Cú pháp khai báo và cách sử dụng Set
- Các toán tử cho Set
- Các toán tử logic được sử dụng
Okay! Tới đây, mình xin kết thúc bài viết về Set type trong series Dart Tour. Nếu có gì thắc mắc hay góp ý cho mình thì bạn có thể để lại bình luận hoặc gởi email theo trang Contact.
Cảm ơn bạn đã đọc bài viết này!
Related Posts:
Written by chuotfx
Hãy ngồi xuống, uống miếng bánh và ăn miếng trà. Chúng ta cùng nhau đàm đạo về đời, về code nhóe!
Leave a Reply Cancel reply
Fan page
Tags
Recent Posts
- Complete Concurrency với Swift 6
- 300 Bài code thiếu nhi bằng Python – Ebook
- Builder Pattern trong 10 phút
- Observer Pattern trong 10 phút
- Memento Pattern trong 10 phút
- Strategy Pattern trong 10 phút
- Automatic Reference Counting (ARC) trong 10 phút
- Autoresizing Masks trong 10 phút
- Regular Expression (Regex) trong Swift
- Lập trình hướng giao thức (POP) với Swift
You may also like:
Archives
- July 2024 (1)
- June 2024 (1)
- May 2024 (4)
- April 2024 (2)
- March 2024 (5)
- January 2024 (4)
- February 2023 (1)
- January 2023 (2)
- November 2022 (2)
- October 2022 (1)
- September 2022 (5)
- August 2022 (6)
- July 2022 (7)
- June 2022 (8)
- May 2022 (5)
- April 2022 (1)
- March 2022 (3)
- February 2022 (5)
- January 2022 (4)
- December 2021 (6)
- November 2021 (8)
- October 2021 (8)
- September 2021 (8)
- August 2021 (8)
- July 2021 (9)
- June 2021 (8)
- May 2021 (7)
- April 2021 (11)
- March 2021 (12)
- February 2021 (3)
- January 2021 (3)
- December 2020 (3)
- November 2020 (9)
- October 2020 (7)
- September 2020 (17)
- August 2020 (1)
- July 2020 (3)
- June 2020 (1)
- May 2020 (2)
- April 2020 (3)
- March 2020 (20)
- February 2020 (5)
- January 2020 (2)
- December 2019 (12)
- November 2019 (12)
- October 2019 (19)
- September 2019 (17)
- August 2019 (10)