C# - C Sharp: SortedList

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Tổng quan

Lớp SortedList dùng để chứa tập hợp các cặp key/value (khóa/giá trị) đã được sắp xếp theo trật tự tăng dần của các key, và các key cũng sẽ được đánh chỉ số bắt đầu từ 0 đối với các key đã được sắp xếp.

Mặc định lớp SortedList sẽ sắp xếp các phần tử theo thứ tự tăng dần (của các key), tuy nhiên, điều này có thể thay đổi nếu một đối tượng IComparrable được truyền tới hàm tạo của lớp SortedList. Những phần tử khi đó hoặc là được truy cập bằng cách sử dụng các key tương ứng hoặc là thông qua các chỉ số của các phần tử.

Nếu ta truy cập các phần tử thông qua các key thì lớp SortedList lại hoạt động giống như một lớp Hashtable, còn nếu truy cập thông qua chỉ số thì lớp này lại đóng vai trò như một mảng.

SortedList cho phép lưu trữ mọi loại dữ liệu, trong đó key có thể có kiểu giá trị bất kỳ, value có kiểu bất kỳ. Tuy nhiên, trong một sortedlist ta nên đặt các key có cùng một kiểu.

Lớp SortedList có các phương thức và thuộc tính được dùng để thêm và thao tác với dữ liệu trong một danh sách đã được sắp xếp.

Lớp SortedList thuộc namespace: System.Collections.

Để tạo một đối tượng có tên objSortList, ta làm như sau:

SortedList objSortList = new SortedList();

Các phương thức của lớp SortedList

1. Add()

Phương thức này dùng để thêm một phần tử với cặp key/value cụ thể vào mảng. Lưu ý rằng các phần tử thêm vào mảng nên có key cùng kiểu (ví dụ như tất cả là kiểu int, hoặc string, ...). Cú pháp:

Name_sortedlist.Add(key, value);

Ví dụ sau sẽ thêm một số phần tử vào objSortList:

using System;
using System.Collections;

namespace Demo
{
  class SortedCollection
  {
    static void Main(string[] args)
    {
      SortedList objSortList = new SortedList();
      objSortList.Add("Thang", "Quan tri"); //index = 2
      objSortList.Add("Binh", "Nhan su"); //index = 0
      objSortList.Add("Thanh", "Tai chinh"); //index = 3
      objSortList.Add("Huyen", "Marketing"); //index = 1
    }
  }
}

2. Remove()

Phương thức này dùng để xóa phần tử có key tương ứng khỏi mảng. Lưu ý rằng key ứng với phần tử đem xóa có thể không có trong danh sách key của mảng, nhưng nhất thiết phải cùng kiểu với các danh sách key của mảng (ví dụ nếu các key của mảng có kiểu string thì key của phần tử đem xóa cũng phải có kiểu string). Cú pháp của phương thức này như sau:

Name_sortedlist.Remove(key);

Ví dụ sẽ xóa phần tử có key là "Joel":

objSortList.Remove("Joel");

3. GetKey()

Phương thức này dùng để lấy key tương ứng với chỉ số (index) được chỉ ra. Các chỉ số ở đây là các số tự nhiên (0, 1, 2, ...). Ví dụ:

Console.WriteLine("Key = " + objSortList.GetKey(3)); //sẽ in ra: Key = Thanh

4. GetByIndex()

Phương thức này dùng để lấy value ứng với index được chỉ ra. Ví dụ:

Console.WriteLine("Value = " + objSortList.GetByIndex(3)); //sẽ in ra: Value = Tai chinh

5. ContainsKey()

Phương thức này dùng để kiểm tra xem một key nào đó có nằm trong danh sách các key của mảng hay không, nếu có thì trả về true, ngược lại trả về false. Ví dụ:

if (objSortList.ContainsKey("Quan"))
{
  Console.WriteLine("Yes");
}
else
{
  Console.WriteLine("No");
}

6. ContainsValue()

Phương thức này dùng để kiểm tra xem một value nào đó có nằm trong danh sách các value của mảng hay không, nếu có thì trả về true, ngược lại trả về false. Ví dụ:

if (objSortList.ContainsValue("Finance"))
{
  Console.WriteLine("Yes");
}
else
{
  Console.WriteLine("No");
}

7. RemoveAt()

Phương thức này dùng để xóa phần tử có chỉ số (index) được chỉ ra tương ứng. Nếu chỉ số nằm ngoài dải giá trị chỉ số thì trình dịch sẽ báo lỗi. Ví dụ:

objSortList.RemoveAt(3); //xóa phần tử có chỉ số = 3

Các thuộc tính của SortedList

1. Capacity

Thiết lập hoặc lấy số lượng phần tử mà mảng SortedList có thể chứa. Ý nghĩa của thuộc tính này cũng khá tương tự với thuộc tính Capacity của ArrayList, có điểm khác là kích thước của Capacity của SortedList tự động thay đổi theo bội số của 16 (n*16, n=0, 1, 2, ...).

Ví dụ sau sẽ in ra giá trị trong thuộc tính Capacity:

Console.WriteLine( objSortList.Capacity );

Còn ví dụ sau sẽ gán giá trị 25 cho Capacity:

objSortList.Capacity = 25;

2. Count

 Thuộc tính Count dùng để lấy kích thước thực tế của tập hợp SortedList. Ví dụ sau đây sẽ hiển thị kích thước thực tế của objSortList:

Console.WriteLine( objSortList.Count );

3. IsFixedSize

Thuộc tính này dùng để chỉ ra kích thước của mảng có được đặt cố định hay không. Nếu kích thước được đặt cố định thì giá trị của thuộc tính là true, ngược lại là false. Ví dụ:

if (objSortList.IsFixedSize)
{
  Console.WriteLine("Yes");
}
else
{
  Console.WriteLine("No");
}

4. IsReadOnly

Thuộc tính này dùng để chỉ ra rằng mảng có thiết lập chế độ read-only hay không, nếu có thì giá trị của thuộc tính là true, ngược lại là false. Ví dụ:

if (objSortList.IsReadOnly)
{
  Console.WriteLine("True");
}
else
{
  Console.WriteLine("False");
}

5. Keys

Thuộc tính Keys là nơi chứa các key của SortedList. Keys được coi như một mảng đơn (một chiều) và nó cũng có một số phương thức cũng như thuộc tính riêng (chẳng hạn như Count, ToString(), GetType(), ...). Ví dụ dưới đây sẽ in ra tất cả các key của SortedList objSortList:

foreach (string key in objSortList.Keys)
  Console.WriteLine(key);

6. Values

Thuộc tính Values là nơi chứa danh sách các key của SortedList. Values cũng được coi là một mảng đơn (một chiều). Ví dụ dưới đây sẽ in ra tất cả các value của SortedList objSortList:

foreach (string value in objSortList.Values)
  
Console.WriteLine(value);

Ví dụ về SortedList

Ví dụ 1:

using System;
using System.Collections;

namespace Demo
{
  class SortedCollection
  {
    static void Main(string[] args)
    {
      SortedList objSortList = new SortedList();
      objSortList.Add("John", "Administration");
      objSortList.Add("Jack", "Human Resources");
      objSortList.Add("Peter", "Finance");
      objSortList.Add("Joel", "Marketing");
      Console.WriteLine("Original values stored in the sorted list");
      Console.WriteLine("Key \t\t Values");
      for (int i = 0; i < objSortList.Count; i++)
      {
        Console.WriteLine(objSortList.GetKey(i) + " \t\t " + objSortList.GetByIndex(i));
      }
      if (!objSortList.ContainsKey("Jerry"))
      {
        objSortList.Add("Jerry", "Construction");
      }
      objSortList["Peter"] = "Engineering";
      objSortList["Jerry"] = "Information Technology";
      Console.WriteLine();
      Console.WriteLine("Updated values stored in hashtable");
      Console.WriteLine("Key \t\t Values");
      for (int i = 0; i < objSortList.Count; i++)
      {
        Console.WriteLine(objSortList.GetKey(i) + " \t\t " + objSortList.GetByIndex(i));
      }
    }
  }
}

Trong ví dụ trên, phương thức Add() chèn các key và các value tương ứng vào trong thể hiện objSortList của SortedList, thuộc tính Count dùng để đếm số phần tử thực tế của danh sách; phương thức GetKey() sẽ trả về key tương ứng với chỉ số được chỉ ra trong đối số; phương thức GetByIndex() trả về value tương ứng với chỉ số được chỉ ra trong đối số của phương thức; phương thức ContainsKey() kiểm tra xem có key với giá trị "Jerry" ở trong danh sách hay không, nếu không có thì thêm key này vào danh sách với giá trị tương ứng là "Construction"; câu lệnh objSortList["Peter"] = "Engineering"; sẽ cập nhật value ứng với key "Peter" thành "Engineering"; câu lệnh objSortList["Jerry"] = "Information Technology"; sẽ cập nhật value ứng với key "Jerry" thành "Information Technology". Kết quả của ví dụ như sau:

sortedlist-example1

Ví dụ 2:

using System;
using System.Collections;

namespace Demo
{
  class Countries
  {
    static void Main(string[] args)
    {
      SortedList objCountries = new SortedList();
      objCountries.Add("UK", "United Kingdom");
      objCountries.Add("GER", "Germany");
      objCountries.Add("USA", "United States of America");
      objCountries.Add("AUS", "Australia");
      Console.WriteLine("Read-only : " +
        objCountries.IsReadOnly);
      Console.WriteLine("Count : " + objCountries.Count);
      Console.WriteLine("List of countries:\n");
      Console.WriteLine("Country Code \t Name");
      for (int i = 0; i < objCountries.Count; i++)
      {
        Console.WriteLine(objCountries.GetKey(i) + "\t\t " + objCountries.GetByIndex(i));
      }
      objCountries.RemoveAt(1);
      Console.WriteLine("\nList of countries after removing element at index 1:\n");
      Console.WriteLine("Country Code \t Name");
      for (int i = 0; i < objCountries.Count; i++)
      {
        Console.WriteLine(objCountries.GetKey(i) + "\t\t " + objCountries.GetByIndex(i));
      }
    }
  }
}

Trong ví dụ trên, phương thức Add() thêm các phần tử theo cặp key/value vào danh sách, phương thức IsReadOnly() kiểm tra xem có thay đổi được các value trong danh sách hay không. Phương thức GetByIndex() trả về value tại tương ứng với chỉ số (index) được chỉ ra. Phương thức RemoveAt() sẽ xóa phần tử tại vị trí chỉ số được chỉ ra (là đối số của phương thức). Kết quả của ví dụ được thể hiện ở hình dưới đây.

sortedlist-example2

» Tiếp: Dictionary generic
« Trước: Hashtable
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!