SortedList trong C#

Khóa học lập trình C# nâng cao

5.0 (2 đánh giá)
Tạo bởi Kteam Cập nhật lần cuối 5 năm trước 40.667 lượt xem 7 bình luận
Tác giả/Dịch giả: Kteam
Học nhanh

Danh sách bài học

SortedList trong C#

Dẫn nhập

Ở các bài học trước, chúng ta đã cùng nhau tìm hiểu về HASTABLE TRONG C#. Hôm nay chúng ta sẽ cùng tìm hiểu về SortedList trong C#.


Nội dung

Để đọc hiểu bài này tốt nhất các bạn nên có kiến thức cơ bản về các phần:

Trong bài học này, chúng ta sẽ cùng tìm hiểu các vấn đề:

  • SortedList là gì?
  • Một số thuộc tính và phương thức hỗ trợ sẵn trong SortedList.

SortedList là gì?

SortedList cũng là một Collections lưu trữ dữ liệu dưới dạng cặp Key - Value. Key đại diện cho 1 khoá giống như chỉ số phần tử của mảng và Value chính là giá trị tương ứng của khoá đó.

Đặc điểm của SortedList

  • Là 1 Hashtable nhưng các giá trị được sắp xếp theo Key. Việc sắp xếp này được thực hiện một cách tự động mỗi khi thêm 1 phần tử mới vào SortedList.
  • Có thể truy xuất đến các phần tử trong SortedListthông qua Key(như Hashtable) hoặc thông qua chỉ số phần tử (như ArrayList).
  • SortedList chính là sự kết hợp giữa ArrayList với Hashtable .

Do SortedList cũng là 1 Collections nên để sử dụng ta cần thêm thư viện System.Collections bằng câu lệnh:

using System.Collections;

Trước khi sử dụng ta cần khởi tạo vùng nhớ bằng toán tử new:

Bạn cũng có chỉ định sức chứa (Capacity) ngay lúc khởi tạo bằng cách thông qua constructor được hỗ trợ sẵn:

Bạn cũng có thể khởi tạo 1 SortedList chứa các phần tử được sao chép từ một SortedList khác:

Vì các phần tử của SortedList được sắp xếp tự động theo Key nên ta cũng có thể chỉ ra cách sắp xếp do mình tự định nghĩa (trong bài ARRAYLIST TRONG C# mình đã có trình bày về việc định nghĩa lại cách sắp xếp) thông qua constructor có sẵn:

Ngoài ra bạn cũng có thể khởi tạo 1 SortedList  chứa các phần tử được sao chép từ 1 SortedList khác đồng thời sắp xếp lại các phần tử theo 1 cách sắp xếp khác:


Một số thuộc tính và phương thức hỗ trợ sẵn trong SortedList

SortedList là sự kết hợp giữa ArrayListHashtable nên nó sẽ mang các thuộc tính, phương thức giống 2 Collections trên và một vài phương thức mới. Ở đây Kteam xin giới thiệu lại để những bạn nào chưa theo dõi những bài trước cũng có thể nắm.

Một số thuộc tính thông dụng trong SortedList:

 TÊN THUỘC TÍNH  

Ý NGHĨA

Count

  Trả về 1 số nguyên là số phần tử hiện có trong SortedList .

Capacity

  Trả về 1 số nguyên cho biết số phần tử mà SortedList có thể chứa (sức chứa).
  Nếu số phần tử được thêm vào chạm sức chứa này thì hệ thống sẽ tự động tăng lên.
  Ngoài ra ta có thể gán 1 sức chứa bất kỳ cho SortedList.

Keys

  Trả về 1 danh sách chứa các Key trong SortedList.

Values

  Trả về 1 danh sách chứa các Value trong SortedList.

Một số phương thức thông dụng trong SortedList:

  TÊN PHƯƠNG THỨC

  Ý NGHĨA

  Add(object Key, object Value)

  Thêm 1 cặp Key - Value vào SortedList.

  Clear()

  Xoá tất cả các phần tử trong SortedList.

  Clone()

  Tạo 1 bản sao từ SortedList hiện tại.

  ContainsKey(object Key)

  Kiểm tra đối tượng Key có tồn tại trong SortedList hay không.

  ContainsValue(object Value)

  Kiểm tra đối tượng Value có tồn tại trong SortedList hay không.

  CopyTo(Array array, int Index)

  Thực hiện sao chép tất cả phần tử trong SortedList sang mảng một chiều array
  từ vị trí Index của array.

Lưu ý: array phải là mảng các object hoặc mảng các DictionaryEntry.

  GetByIndex(int Index)

  Trả về giá trị Value tại vị trí Index trong SortedList.

  GetKey(int Index)

  Trả về giá trị Key tại vị trí Index trong SortedList.

  GetKeyList()

  Trả về 1 List các Key trong SortedList. (xem thêm LIST TRONG C#)

  GetValueList()

  Trả về 1 List các Value trong SortedList.

  IndexOfKey(object Key)

  Trả về 1 số nguyên là chỉ số phần tử của 1 Key trong SortedList.

  Remove(object Key)

  Xoá đối tượng có Key xuất hiện đầu tiên trong SortedList.

  RemoveAt(int Index)

  Xoá đối tượng tại vị trí Index trong SortedList.

  SetByIndex(int Index, object Value)

  Gán giá trị Value mới tại vị trí Index trong SortedList.

Về cách sử dụng thì bạn thao tác hoàn toàn giống với Hashtable .


Một số lưu ý

Nếu bạn muốn các giá trị Key là các đối tượng thuộc 1 lớp nào đó thì bạn phải định nghĩa cách so sánh đối tượng đó. Nếu không chương trình sẽ báo lỗi vì nó không biết phải sắp xếp các Key này như thế nào. Ví dụ đoạn chương trình sau:

Khi chạy chương trình trên sẽ nhận được lỗi sau:

SortedList trong C#

Để khắc phục điều này ta có thể định nghĩa 1 lớp thực thi interface IComparer và định nghĩa cách sắp xếp trong hàm Comparer:

Sau đó sử dụng constructor của SortedList để truyền lớp này vào:

Khi đó chương trình sẽ căn cứ vào hàm Comparer để sắp xếp các Key.

Khi các Key hoặc Value là các đối tượng thuộc 1 lớp nào đó thì thì ta nên override lại phương thức ToString để việc in ra KeyValue không bị lỗi:

Ví dụ với đoạn chương trình trên khi chưa override phương thức ToString thì kết quả hiển thị là:

SortedList trong C#

Ta thử override phương thức ToString trong lớp Person:

Kết quả:

SortedList trong C#


Kết luận

Nội dung bài này giúp các bạn nắm được:

  • SortedList là gì?
  • Một số thuộc tính và phương thức hỗ trợ sẵn trong SortedList.

Bài học sau chúng ta sẽ cùng tìm hiểu về STACK TRONG C#.

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.


Tải xuống

Tài liệu

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học SortedList trong C# dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Đừng quên likeshare để ủng hộ Kteam và tác giả nhé!

Project

Nếu việc thực hành theo hướng dẫn không diễn ra suôn sẻ như mong muốn. Bạn cũng có thể tải xuống PROJECT THAM KHẢO ở link bên dưới!


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

Tác giả/Dịch giả

Khóa học

Khóa học lập trình C# nâng cao

Bạn đã học hết các khoá học về C# CƠ BẢN, LẬP TRÌNH WINFORM thậm chí là LẬP TRÌNH WPF nhưng vẫn bối rối trước những hướng dẫn về CÁC PROJECT THỰC TẾ của Kteam?

Hoặc bạn nghe nói mãi về .NET nhưng vẫn thắc mắc nó có gì hay ho bên trong đó?

Hay đơn giản bạn viết muốn 1 đoạn code cực kỳ nguy hiểm khiến người khác khi nhìn vào phải thốt lên: “Ồ!!!......... Trẻ trâu…”

Khoá học lần này sẽ giúp bạn giải đáp những thắc mắc trên. Chào mừng các bạn đã đến với khoá học Lập trình C# nâng cao của Kteam.

Đánh giá

5.0
2 đánh giá
Đánh giá
5
2
4
3
2
1
moon272 đã đánh giá 4 năm trước

Kobe24 đã đánh giá 4 năm trước

Thanks HowKteam, K9.

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
anhprodabanh đã bình luận 3 năm trước

em vẫn ko hiểu nó khác gì với hashtable

hjewvjp2k đã bình luận 5 năm trước

cho e hỏi là muốm sắp xếp theo tên thì phải làm thế nào ạ e làm nó toàn báo lỗi hoặc chạy nhưng không thực hiện sắp xếp

 

DuongHuuLoc đã bình luận 5 năm trước

Cái SortedList này có cái bối rối là implement IComparer. Nếu người dùng add vào 2 khóa ví dụ như "12" và 12, nó vẫn cho phép vì 2 khóa là 2 kiểu dữ liệu khác nhau, ko bị trùng. Như vậy sẽ khó cho việc implement sort được đúng, nên mình nghĩ ko nên dùng SortedList vì nó có thể implicit.

mmovncom đã bình luận 5 năm trước

Cái thàng SortedList này có 1 cái rất khó chịu là nếu như add vào Age của person bằng nhau nó sẽ bị lỗi trùng key nên chưa biết các làm thế nào để sort good với thằng này. AI có giải pháp gì không.

hthecong đã bình luận 7 năm trước

Cảm ơn KTeam! Nên có thêm loạt bài về System.Collections.Generic nữa. Vì hiện nay hầu như không còn sử dụng Collection nữa rồi. 

Không có video.