Bên cạnh mảng và dictionary thì set (tập hợp) là một dạng dữ liệu cũng khá hay đó bạn ạ. Set trong Swift cũng là một dạng dữ liệu có khả năng lưu trữ nhiều phần tử giống mảng và dictionary. Tuy nhiên set lại có cách thức hoạt động hơi khác so với mảng và dictionary, vì vậy bài viết này mình sẽ tập trung hướng dẫn bạn phương pháp tạo và quản lý Set trong Swift.
Set là gì?
Một Set (tập hợp) giống mảng và dictionary là đều có khả năng lưu trữ và gom nhóm nhiều đối tượng con bên trong. Nhưng Set lại khác mảng ở chỗ không quan tâm đến thứ tự sắp xếp của các phần tử con. Đồng thời, các phần tử trong Set không được trùng nhau.
➤ Lưu ý: Nên sử dụng Set thay thế mảng nếu bạn không quan tâm thứ tự các phần tử bên trong. Qua kiểm thử cho thấy Set thực thi nhanh hơn mảng.
Cú pháp tạo Set
Có 02 phương pháp tạo Set phổ biến như sau:
Phương pháp 1: tạo Set rỗng.
Thực hiện theo cú pháp sau để tạo một Set mới (không có bất kỳ phần tử nào bên trong):
➤ Ví dụ: khai báo một Set rỗng dùng để lưu trữ các phần tử con có kiểu String như sau.
Chỉ với một dòng như vậy thôi là bạn đã tạo được một Set có tên models. Set này có thể lưu trữ nhiều phần tử bên trong nó, nhưng mỗi một phần tử phải thoả điều kiện là kiểu String và không trùng nhau bạn nhé.
Phương pháp 2: tạo Set bằng cách gán các phần tử trực tiếp.
Với phương pháp này, bạn có thể vừa tạo Set vừa gán các phần tử con vào Set ngay tại thời điểm khởi tạo. Cú pháp như sau:
Nhìn cú pháp trên, bạn có cảm thấy tương tự như mảng không? Hoàn toàn giống nhau phải không nào, nếu bạn hiểu được bài mảng thì mình tin rằng bạn sẽ rất nhanh để hiểu cú pháp này.
➤ Ví dụ: bây giờ thì bạn hãy làm thử ví dụ sau nhé:
Trong ví dụ trên, mình đã tạo một Set có tên models. Đồng thời mình cũng gán luôn các phần tử có kiểu String vào trong Set models tương tự việc thao tác với mảng. Ngoài ra, bạn cũng có thể viết một cách ngắn gọn hơn như sau:
Thao tác với Set
Trước khi đi vào một số thao tác với Set, bạn hãy xem qua một vài thuộc tính sau đây:
Ở trên là một số phương thức và thuộc tính cơ bản mà bạn sẽ hay sử dụng. Ngoài ra, bạn hãy nhớ giúp mình một số ý sau đây:
- Các phần tử trong Set là duy nhất. Vì vậy Set sẽ tự động loại bỏ những phần tử trùng nhau khi được thêm vào.
- Tương tự dictionary, giá trị mỗi phần tử trong Set cũng được thể hiện dưới dạng Optional.
- Tương tự mảng, chúng ta cũng sẽ sử dụng vòng lặp để duyệt tất cả các phần tử trong Set. Ví dụ:
Sắp xếp các phần tử trong Set
Việc sắp xếp các phần tử trong Set cũng tương tự như sắp xếp các phần tử trong mảng. Vì vậy bạn cũng sử dụng phương thức sorted() để sắp xếp các phần tử tăng dần.
➤ Ví dụ:
Trong trường hợp bạn muốn sắp xếp giảm hoặc muốn sắp xếp theo một tiêu chí nào đó, thì cũng có thể sử dụng closure để định nghĩa lại việc sắp xếp theo tiêu chí mà bạn mong muốn. Ví dụ như sau:
Trong 02 ví dụ trên, bạn có thể dễ dàng thấy được rằng cách thức thực hiện hoàn toàn giống mảng. Do đó phần này mình tin rằng sẽ không có gì khó để làm khó được bạn, phải không nào.
Kết hợp Set
Như mình đã giới thiệu, Set trong Swift là một kiểu tập hợp do đó nó cũng được xây dựng một số phép kết hợp như sau:
- intersection(_:) tạo tập hợp mới chứa tất cả các phần tử vừa thuộc a, vừa thuộc b.
- symmetricDifference(_:) tạo tập hợp mới chứa các phần tử của riêng a và của riêng b.
- union(_:) tạo tập hợp mới chứa tất cả các phần tử của cả a và b.
- subtracting(_:) tạo tập hợp mới chứa tất cả các phần tử thuộc a mà không thuộc b.
Để hiểu rõ hơn về những phép kết hợp trên, bạn hãy thử làm ví dụ sau đây nhé.
➤ Ví dụ: Cho 03 tập hợp như sau:
Từ 03 tập hợp trên, bạn hãy áp dụng các phép kết hợp Set như sau để hiểu rõ hơn về phép kết hợp nhé.
Rất đơn giản phải không bạn. Với mỗi một phép kết hợp, bạn hãy làm thử và so sánh kết quả nhé. Mình tin rằng nếu bạn chịu khó vừa đọc vừa làm thử thì sẽ rất nhanh để làm chủ những kiến thức này.
Tổng kết
Trong phần này mình đã trình bày cho bạn cách thức sử dụng Set trong Swift. Đây cũng là bài viết cuối trong chuỗi bài viết về lập trình Swift cơ bản. Những bài viết sau mình sẽ hướng dẫn bạn những kiến thức nâng cao hơn về ngôn ngữ Swift. Vì vậy bạn hãy tổng hợp lại tất cả kiến thức trước khi sang phần mới nhé. Nếu trong phần này có chỗ nào khó hiểu thì bạn hãy cứ comment bên dưới, mình sẽ cố gắng hỗ trợ trong khả năng có thể.