C# 排序列表(SortedList)
C# では、SortedList(ソート済みリスト)はキーによって自動的にソートされるコレクションであり、キーと値のペアでデータを格納し、追加または更新時にキーの順序(昇順)に従って自動的にソートされます。
SortedList クラスは、キーによって並べ替えられた一連のキーと値のペアを表します。key => valueこれらのキーと値のペアは、キーとインデックスを使用してアクセスできます。
ソート済みリストは、配列とハッシュテーブルの組み合わせです。キーまたはインデックスを使用して項目にアクセスできるリストが含まれます。インデックスを使用して項目にアクセスする場合は動的配列(ArrayList)であり、キーを使用して項目にアクセスする場合はハッシュテーブル(Hashtable)です。コレクション内の項目は常にキー値によって並べ替えられています。
SortedList には2つのバージョンがあります:
- 非泛型
SortedList(System.Collections.SortedList) - 泛型
SortedList<TKey, TValue>(System.Collections.Generic.SortedList<TKey, TValue>)
特点:
- 自动排序:すべてのキーは昇順に並べ替えられており、並べ替えメソッドを手動で呼び出す必要はありません。
- キーと値のペアの格納:各キーは一意であり、関連付けられた値は重複することができます。
- 動的に容量を調整する:必要に応じて内部ストレージのサイズを自動的に調整します。
- 索引访问:キーまたはインデックスによってデータにアクセスします。
- 高效操作:検索、挿入、削除の平均時間計算量は O(log n) です。
SortedList クラスのメソッドとプロパティ
以下の表に一覧を示しますSortedListクラスのよく使われるいくつかの属性:
| 属性名称 | 类型 | 描述 |
|---|---|---|
Count | int | ソート済みリスト内のキーと値のペアの数を取得します。 |
Capacity | int | ソート済みリストの容量を取得または設定します。 |
Comparer | IComparer 或 IComparer<TKey> | キーを並べ替えるために使用する比較子を取得します。 |
IsReadOnly | bool | ソート済みリストが読み取り専用かどうかを示します。 |
IsFixedSize | bool | ソート済みリストが固定サイズかどうかを示します(常にfalse)。 |
Keys | ICollection 或 IList<TKey> | ソート済みリスト内のすべてのキーを取得します。 |
Values | ICollection 或 IList<TValue> | ソート済みリスト内のすべての値を取得します。 |
以下の表に一覧を示しますSortedListクラスのよく使われるいくつかの方法:
| 方法名称 | 返回类型 | 描述 |
|---|---|---|
| 追加と削除 | ||
Add(TKey key, TValue value) | void | 指定されたキーと値のペアをソート済みリストに追加します。 |
Remove(TKey key) | bool | 指定されたキーを持つ要素をソート済みリストから削除します。 |
RemoveAt(int index) | void | ソート済みリスト内の指定されたインデックス位置にあるキーと値のペアを削除します。 |
Clear() | void | ソート済みリストからすべての要素を削除します。 |
| 検索とアクセス | ||
ContainsKey(TKey key) | bool | ソート済みリストに指定されたキーが含まれているかどうかを判断します。 |
ContainsValue(TValue value) | bool | ソート済みリストに指定された値が含まれているかどうかを判断します。 |
IndexOfKey(TKey key) | int | 指定されたキーのインデックスを返します。 |
IndexOfValue(TValue value) | int | 指定された値のインデックスを返します。 |
TryGetValue(TKey key, out TValue value) | bool | 指定されたキーに関連付けられた値を取得し、存在する場合はそれを返します。true。 |
| コピーと列挙 | ||
CopyTo(Array array, int index) | void | ソート済みリストの要素を、指定されたインデックスから始まる配列にコピーします。 |
GetEnumerator() | IEnumerator | ソート済みリスト内の要素を反復処理するための列挙子を返します。 |
实例
以下の例は、ソート済みリスト(SortedList)の概念を示しています。
非ジェネリック版の操作:
实例
using System;
using System.Collections;
namespace CollectionsApplication
{
class Program
{
static void Main(string[] args)
{
SortedList sl = new SortedList();
sl.Add("001", "Zara Ali");
sl.Add("002", "Abida Rehman");
sl.Add("003", "Joe Holzner");
sl.Add("004", "Mausam Benazir Nur");
sl.Add("005", "M. Amlan");
sl.Add("006", "M. Arif");
sl.Add("007", "Ritesh Saikia");
if (sl.ContainsValue("Nuha Ali"))
{
Console.WriteLine("This student name is already in the list");
}
else
{
sl.Add("008", "Nuha Ali");
}
// キーの集合を取得
ICollection key = sl.Keys;
foreach (string k in key)
{
Console.WriteLine(k + ": " + sl[k]);
}
}
}
}
using System.Collections;
namespace CollectionsApplication
{
class Program
{
static void Main(string[] args)
{
SortedList sl = new SortedList();
sl.Add("001", "Zara Ali");
sl.Add("002", "Abida Rehman");
sl.Add("003", "Joe Holzner");
sl.Add("004", "Mausam Benazir Nur");
sl.Add("005", "M. Amlan");
sl.Add("006", "M. Arif");
sl.Add("007", "Ritesh Saikia");
if (sl.ContainsValue("Nuha Ali"))
{
Console.WriteLine("This student name is already in the list");
}
else
{
sl.Add("008", "Nuha Ali");
}
// キーの集合を取得
ICollection key = sl.Keys;
foreach (string k in key)
{
Console.WriteLine(k + ": " + sl[k]);
}
}
}
}
上記のコードをコンパイルして実行すると、次の結果が生成されます:
001: Zara Ali 002: Abida Rehman 003: Joe Holzner 004: Mausam Banazir Nur 005: M. Amlan 006: M. Arif 007: Ritesh Saikia 008: Nuha Ali
泛型版:
实例
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
// 创建泛型 SortedList
SortedList<int, string> sortedList = new SortedList<int, string>();
// キーと値のペアを追加
sortedList.Add(2, "Banana");
sortedList.Add(1, "Apple");
sortedList.Add(3, "Cherry");
// 自动按键排序
Console.WriteLine("SortedList contents:");
foreach (var kvp in sortedList)
{
Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}");
}
// 検索とアクセス
Console.WriteLine($"\nValue for key 2: {sortedList[2]}"); // 输出:Banana
// 删除元素
sortedList.Remove(1);
Console.WriteLine("\nAfter removing key 1:");
foreach (var kvp in sortedList)
{
Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}");
}
// キーと値を確認
Console.WriteLine($"\nContains key 3: {sortedList.ContainsKey(3)}"); // 输出:True
Console.WriteLine($"Contains value 'Apple': {sortedList.ContainsValue("Apple")}"); // 输出:False
}
}
using System.Collections.Generic;
class Program
{
static void Main()
{
// 创建泛型 SortedList
SortedList<int, string> sortedList = new SortedList<int, string>();
// キーと値のペアを追加
sortedList.Add(2, "Banana");
sortedList.Add(1, "Apple");
sortedList.Add(3, "Cherry");
// 自动按键排序
Console.WriteLine("SortedList contents:");
foreach (var kvp in sortedList)
{
Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}");
}
// 検索とアクセス
Console.WriteLine($"\nValue for key 2: {sortedList[2]}"); // 输出:Banana
// 删除元素
sortedList.Remove(1);
Console.WriteLine("\nAfter removing key 1:");
foreach (var kvp in sortedList)
{
Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}");
}
// キーと値を確認
Console.WriteLine($"\nContains key 3: {sortedList.ContainsKey(3)}"); // 输出:True
Console.WriteLine($"Contains value 'Apple': {sortedList.ContainsValue("Apple")}"); // 输出:False
}
}