ููŠ ุงู„ู…ู‚ุงู„ ุฏู‡ุŒ ู‡ู†ุชูƒู„ู… ุนู† SortedListุŒ ูˆู‡ูˆ collection ูุฑูŠุฏ ู…ู† ู†ูˆุนู‡ ุจูŠุฌู…ุน ุจูŠู† ู…ู…ูŠุฒุงุช ุงู„ู€ Array ูˆุงู„ู€ Hashtable. ู‡ูˆ ู…ูˆุฌูˆุฏ ููŠ System.Collections ูˆุจูŠุนุชุจุฑ Non-Generic.

What is SortedList?

ุงู„ู€ SortedList ู‡ูˆ collection ู…ู† ู†ูˆุน Key/Value pairsุŒ ูˆุงู„ู…ูŠุฒุฉ ุงู„ุฃุณุงุณูŠุฉ ุจุชุงุนุชู‡ ุฅู† ุนู†ุงุตุฑู‡ ุฏุงูŠู…ู‹ุง ุจุชูƒูˆู† ู…ุชุฑุชุจุฉ ุชุตุงุนุฏูŠู‹ุง ุนู„ู‰ ุญุณุจ ุงู„ู€ Keys.

ุฏู‡ ู…ุนู†ุงู‡ ุฅู†ู‡ ุจูŠูˆูุฑู„ูƒ ุทุฑูŠู‚ุชูŠู† ู„ู„ูˆุตูˆู„ ู„ู„ุนู†ุงุตุฑ:

  1. ุนู† ุทุฑูŠู‚ ุงู„ู€ Key (ุฒูŠ ุงู„ู€ Hashtable).
  2. ุนู† ุทุฑูŠู‚ ุงู„ู€ Index (ุฒูŠ ุงู„ู€ ArrayList).

Properties of SortedList

  • ุงู„ู€ Interfaces: ุจูŠู†ูุฐ ุงู„ู€ interfaces ุงู„ู„ูŠ ุงุณู…ู‡ุง IEnumerable, ICollection, IDictionary, ูˆ ICloneable.
  • ุงู„ู€ Internal Structure: ู…ู† ุฌูˆู‡ุŒ ู‡ูˆ ุจูŠุญุชูุธ ุจู€ two arrays: ูˆุงุญุฏ ู„ู„ู€ keys ูˆูˆุงุญุฏ ู„ู„ู€ values ุงู„ู…ุฑุชุจุทุฉ ุจูŠู‡ุง.
  • ุงู„ู€ Key Rules: ุงู„ู€ Key ู…ูŠู†ูุนุด ูŠูƒูˆู† null ูˆู„ุงุฒู… ูŠูƒูˆู† ูุฑูŠุฏ (unique).
  • ุงู„ู€ Value Rules: ุงู„ู€ Value ู…ู…ูƒู† ุชูƒูˆู† null ุฃูˆ ู…ูƒุฑุฑุฉ ุนุงุฏูŠ.
  • ุงู„ู€ Key Type: ู„ุงุฒู… ูƒู„ ุงู„ู€ keys ููŠ ู†ูุณ ุงู„ู€ SortedList ุชูƒูˆู† ู…ู† ู†ูุณ ู†ูˆุน ุงู„ุจูŠุงู†ุงุช. ู„ูˆ ุญุงูˆู„ุช ุชุถูŠู key ุจู†ูˆุน ู…ุฎุชู„ูุŒ ู‡ุชุงุฎุฏ Exception.
  • ุงู„ู€ Type Safety: ุจู…ุง ุฅู†ู‡ Non-GenericุŒ ูู‡ูˆ ุจูŠู‚ุจู„ ุฃูŠ ู†ูˆุน ู…ู† ุงู„ุจูŠุงู†ุงุช ููŠ ุงู„ู€ Values ู„ุฃู†ู‡ ุจูŠุชุนุงู…ู„ ู…ุนุงู‡ุง ูƒู€ object.

Creating a SortedList

ุฃูˆู„ ุญุงุฌุฉุŒ ู„ุงุฒู… ู†ุนู…ู„ using System.Collections;. ุจุนุฏูŠู† ุจู†ู†ุดุฆ instance ู…ู† ุงู„ู€ SortedList.

// Create an empty SortedList
SortedList sortedList = new SortedList();

Adding Elements

ุจู†ุณุชุฎุฏู… Add(key, value) ุนุดุงู† ู†ุถูŠู ุนู†ุงุตุฑุŒ ุฃูˆ ู…ู…ูƒู† ู†ุณุชุฎุฏู… ุทุฑูŠู‚ุฉ ุงู„ู€ collection-initializer.

SortedList sortedList = new SortedList();
 
// Add elements using the Add() method
sortedList.Add(1, "One");
sortedList.Add(5, "Five");
sortedList.Add(4, "Four");
sortedList.Add(2, "Two");
sortedList.Add(3, "Three");
 
// Note: Elements will be automatically sorted by key: 1, 2, 3, 4, 5
 
// --- Important Rules ---
// Duplicate key will throw an ArgumentException
// sortedList.Add(4, "Another Four"); 
 
// Null value is allowed
sortedList.Add(6, null);
 
// Duplicate value is allowed
sortedList.Add(7, "Five");
 
// Adding a key of a different type (e.g., string) will throw an exception
// sortedList.Add("Ten", "Ten"); 

Accessing Elements

ุฏูŠ ูˆุงุญุฏุฉ ู…ู† ุฃู‚ูˆู‰ ู…ู…ูŠุฒุงุช ุงู„ู€ SortedListุŒ ู„ุฅู†ูƒ ุชู‚ุฏุฑ ุชูˆุตู„ ู„ู„ุนู†ุงุตุฑ ุจุฃูƒุชุฑ ู…ู† ุทุฑูŠู‚ุฉ.

Using Keys

ุฒูŠ ุงู„ู€ HashtableุŒ ุจู†ุณุชุฎุฏู… ุงู„ู€ indexer [] ู…ุน ุงู„ู€ key.

Console.WriteLine($"Key: 1, Value: {sortedList[1]}"); // Outputs: One

Using Index

ุฒูŠ ุงู„ู€ ArrayListุŒ ุจู†ุณุชุฎุฏู… index (ุงู„ู„ูŠ ุจูŠูƒูˆู† ู…ุชุฑุชุจ ุนู„ู‰ ุญุณุจ ุงู„ู€ keys).

// Get value by its sorted index
Console.WriteLine($"Index: 0, Value: {sortedList.GetByIndex(0)}"); // Outputs: One (because key 1 is at index 0)
 
// Get key by its sorted index
Console.WriteLine($"Index: 0, Key: {sortedList.GetKey(0)}"); // Outputs: 1

Using Loops

  • ุงู„ู€ foreach loop: ุจูŠู„ู ุนู„ู‰ ุงู„ุนู†ุงุตุฑ ูƒู€ DictionaryEntry.
  • ุงู„ู€ for loop: ู…ู†ุงุณุจ ุฌุฏู‹ุง ู‡ู†ุง ู„ุฅู†ู†ุง ู†ู‚ุฏุฑ ู†ุณุชุฎุฏู… ุงู„ู€ index.
// Using a foreach loop
Console.WriteLine("\nAccessing with foreach loop:");
foreach (DictionaryEntry item in sortedList)
{
    Console.WriteLine($"Key: {item.Key}, Value: {item.Value}");
}
 
// Using a for loop
Console.WriteLine("\nAccessing with for loop:");
for (int i = 0; i < sortedList.Count; i++)
{
    Console.WriteLine($"Key: {sortedList.GetKey(i)}, Value: {sortedList.GetByIndex(i)}");
}

Removing Elements

  • ุงู„ู€ Remove(key): ุจุชุญุฐู ุงู„ุนู†ุตุฑ ุจุงู„ู€ key ุจุชุงุนู‡.
  • ุงู„ู€ RemoveAt(index): ุจุชุญุฐู ุงู„ุนู†ุตุฑ ุจุงู„ู€ index ุจุชุงุนู‡ (ุจุนุฏ ุงู„ุชุฑุชูŠุจ).
  • ุงู„ู€ Clear(): ุจุชุญุฐู ูƒู„ ุงู„ุนู†ุงุตุฑ.
// Remove element with key "USA"
sortedList.Remove("USA");
 
// Remove element at index 1 (after sorting)
sortedList.RemoveAt(1);
 
// Clear all elements
sortedList.Clear();
Console.WriteLine($"Total elements after Clear(): {sortedList.Count}"); // Outputs: 0

Checking for Availability

  • ุงู„ู€ Contains(key) ุฃูˆ ContainsKey(key): ุจุชุชุฃูƒุฏ ู„ูˆ ููŠู‡ key ู…ุนูŠู† ู…ูˆุฌูˆุฏ.
  • ุงู„ู€ ContainsValue(value): ุจุชุชุฃูƒุฏ ู„ูˆ ููŠู‡ value ู…ุนูŠู†ุฉ ู…ูˆุฌูˆุฏุฉ.
Console.WriteLine("Does key 'Ind' exist? " + sortedList.ContainsKey("Ind"));      // True
Console.WriteLine("Does value 'India' exist? " + sortedList.ContainsValue("India")); // True

Other Useful Methods and Properties

  • ุงู„ู€ Clone(): ุจุชุนู…ู„ shallow copy ู…ู† ุงู„ู€ SortedList.
  • ุงู„ู€ CopyTo(array, index): ุจุชู†ุณุฎ ุนู†ุงุตุฑ ุงู„ู€ SortedList ู„ู€ array ุนุงุฏูŠุฉ. ู…ู…ูƒู† ูƒู…ุงู† ุชู†ุณุฎ ุงู„ู€ Keys ุจุณ ุฃูˆ ุงู„ู€ Values ุจุณ.
    sortedList.Keys.CopyTo(myKeysArray, 0);
    sortedList.Values.CopyTo(myValuesArray, 0);
  • Properties:
    • ุงู„ู€ Keys: ุจุชุฑุฌุน collection ููŠู‡ุง ูƒู„ ุงู„ู€ keys.
    • ุงู„ู€ Values: ุจุชุฑุฌุน collection ููŠู‡ุง ูƒู„ ุงู„ู€ values.
    • ุงู„ู€ Count: ุจุชุฑุฌุน ุนุฏุฏ ุงู„ุนู†ุงุตุฑ.
    • ุงู„ู€ Capacity: ุจุชุฑุฌุน ุงู„ุณุนุฉ ุงู„ุชุฎุฒูŠู†ูŠุฉ ุงู„ุญุงู„ูŠุฉ.

When to Use SortedList?

ุงู„ู€ SortedList ุฃุฏุงุฉ ู‚ูˆูŠุฉุŒ ู„ูƒู† ู„ุงุฒู… ู†ูู‡ู… ุฅู†ู‡ุง ุจุชุฏูุน ุชู…ู† ุงู„ุชุฑุชูŠุจ ุฏู‡. ู…ุน ูƒู„ ุนู…ู„ูŠุฉ ุฅุถุงูุฉ ุฃูˆ ุญุฐูุŒ ุงู„ู€ collection ุจุชุญุชุงุฌ ุชุนูŠุฏ ุชุฑุชูŠุจ ู†ูุณู‡ุง ุนุดุงู† ุชูุถู„ ู…ุชุฑุชุจุฉ. ุฏู‡ ุจูŠุฎู„ูŠู‡ุง ู…ูƒู„ูุฉ ููŠ ุงู„ุฃุฏุงุก (expensive) ู„ูˆ ุจู†ุชุนุงู…ู„ ู…ุน ุนุฏุฏ ูƒุจูŠุฑ ุฌุฏู‹ุง ู…ู† ุงู„ุนู†ุงุตุฑ.

ุงู„ุฎู„ุงุตุฉ:

  • ุงุณุชุฎุฏู… SortedList: ู„ู…ุง ุชูƒูˆู† ุจุชุชุนุงู…ู„ ู…ุน collections ุตุบูŠุฑุฉ ูˆู…ุญุชุงุฌู‡ุง ุชูุถู„ ู…ุชุฑุชุจุฉ ุฏุงูŠู…ู‹ุงุŒ ูˆู…ุญุชุงุฌ ุชูˆุตู„ ู„ู„ุนู†ุงุตุฑ ุจุงู„ู€ key ูˆุงู„ู€ index.
  • ุชุฌู†ุจ SortedList: ู„ูˆ ุจุชุชุนุงู…ู„ ู…ุน collections ูƒุจูŠุฑุฉ ุฌุฏู‹ุง ูˆุงู„ุจูŠุงู†ุงุช ุจุชุชุบูŠุฑ ุจุงุณุชู…ุฑุงุฑ. ููŠ ุงู„ุญุงู„ุฉ ุฏูŠุŒ ุงู„ุฃูุถู„ ุชุณุชุฎุฏู… Dictionary ุฃูˆ HashSetุŒ ุฃูˆ ุญุชู‰ List ุนุงุฏูŠุฉ ูˆุชุฑุชุจู‡ุง ูˆู‚ุช ู…ุง ุชุญุชุงุฌ ุจุณ ุจุงุณุชุฎุฏุงู… Sort().

ู†ุตูŠุญุฉ: ุงู„ู€ SortedList ู‡ูˆ non-genericุŒ ูˆู„ู„ุฃูƒูˆุงุฏ ุงู„ุญุฏูŠุซุฉ ุงู„ู„ูŠ ุจุชู‡ุชู… ุจุงู„ู€ type-safety ูˆุงู„ุฃุฏุงุกุŒ ูŠููุถู„ ุงุณุชุฎุฏุงู… ุงู„ุจุฏูŠู„ ุงู„ู€ generic ูˆู‡ูˆ SortedList<TKey, TValue>.