C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のSortedListオブジェクトの容量を実際の要素数に設定する方法

C#のSortedListオブジェクトにおいて、容量(Capacity)を実際の要素数に合わせて縮小するには、TrimToSize()メソッドを使用します。このメソッドを呼び出すことで、余分なメモリ領域が解放され、CapacityがCount(実際のキーと値のペア数)と一致するようになります。

それでは、具体的なコード例を見ていきましょう。

サンプルコード1

using System;
using System.Collections;
public class Demo {
   public static void Main(String[] args) {
      SortedList sortedList = new SortedList();
      sortedList.Add("A", "1");
      sortedList.Add("B", "2");
      sortedList.Add("C", "3");
      sortedList.Add("D", "4");
      sortedList.Add("E", "5");
      sortedList.Add("F", "6");
      sortedList.Add("G", "7");
      sortedList.Add("H", "8");
      sortedList.Add("I", "9");
      sortedList.Add("J", "10");
      Console.WriteLine("SortedList elements...");
      foreach(DictionaryEntry d in sortedList) {
         Console.WriteLine("Key = "+d.Key + ", Value = " + d.Value);
      }
      Console.WriteLine("\nEnumerator to iterate through the SortedList...");      
      IDictionaryEnumerator demoEnum = sortedList.GetEnumerator();
      while (demoEnum.MoveNext())
      Console.WriteLine("Key = " + demoEnum.Key + ", Value = "+ demoEnum.Value);
      Console.WriteLine("Count of SortedList key-value pairs = "+sortedList.Count);
      Console.WriteLine("Capacity of SortedList = "+sortedList.Capacity);
      sortedList.TrimToSize();
      Console.WriteLine("Capacity of SortedList (Updated) = "+sortedList.Capacity);
   }
}

実行結果

上記のコードを実行すると、次のような出力が得られます。

SortedList elements...
Key = A, Value = 1
Key = B, Value = 2
Key = C, Value = 3
Key = D, Value = 4
Key = E, Value = 5
Key = F, Value = 6
Key = G, Value = 7
Key = H, Value = 8
Key = I, Value = 9
Key = J, Value = 10
Enumerator to iterate through the SortedList...
Key = A, Value = 1
Key = B, Value = 2
Key = C, Value = 3
Key = D, Value = 4
Key = E, Value = 5
Key = F, Value = 6
Key = G, Value = 7
Key = H, Value = 8
Key = I, Value = 9
Key = J, Value = 10
Count of SortedList key-value pairs = 10
Capacity of SortedList = 16
Capacity of SortedList (Updated) = 10

ポイント解説

この例では、10個の要素を追加した時点でCapacityは「16」になっています。これは、SortedListが内部的に必要に応じて容量を自動的に拡張するためです。TrimToSize()メソッドを呼び出した後は、Capacityが実際の要素数である「10」に縮小されていることが確認できます。

サンプルコード2

続いて、別の例を見てみましょう。複数のSortedListに対してGetKeyList()でキーの一覧を取得し、それぞれのCapacityの変化を確認しています。

using System;
using System.Collections;
public class Demo {
   public static void Main(String[] args) {
      SortedList list1 = new SortedList();
      list1.Add("One", 1);
      list1.Add("Two ", 2);
      list1.Add("Three ", 3);
      list1.Add("Four", 4);
      list1.Add("Five", 5);
      list1.Add("Six", 6);
      list1.Add("Seven ", 7);
      list1.Add("Eight ", 8);
      list1.Add("Nine", 9);
      list1.Add("Ten", 10);
      Console.WriteLine("SortedList1 elements...");
      foreach(DictionaryEntry d in list1) {
         Console.WriteLine(d.Key + " " + d.Value);
      }
      Console.WriteLine("\nList of keys...SortedList1");
      IList list = list1.GetKeyList();
      foreach(string res in list)
         Console.WriteLine(res);
      Console.WriteLine("Capacity of SortedList1 = "+list1.Capacity);
      list1.TrimToSize();
      Console.WriteLine("Capacity of SortedList1 (Updated) = "+list1.Capacity);
      SortedList list2 = new SortedList();
      list2.Add("A", "Accessories");
      list2.Add("B", "Books");
      list2.Add("C", "Smart Wearable Tech");
      list2.Add("D", "Home Appliances");
      Console.WriteLine("\nSortedList2 elements...");
      foreach(DictionaryEntry d in list2) {
         Console.WriteLine(d.Key + " " + d.Value);
      }
      Console.WriteLine("\nList of keys...SortedList2");
      list = list2.GetKeyList();
      foreach(string res in list)
         Console.WriteLine(res);
      Console.WriteLine("Capacity of SortedList2 = "+list2.Capacity);
      list2.TrimToSize();
      Console.WriteLine("Capacity of SortedList2 (Updated) = "+list2.Capacity);
   }
}

実行結果

上記のコードを実行すると、次のような出力が得られます。

SortedList1 elements...
Eight  8
Five 5
Four 4
Nine 9
One 1
Seven  7
Six 6
Ten 10
Three  3
Two  2
List of keys...SortedList1
Eight
Five
Four
Nine
One
Seven
Six
Ten
Three
Two
Capacity of SortedList1 = 16
Capacity of SortedList1 (Updated) = 10
SortedList2 elements...
A Accessories
B Books
C Smart Wearable Tech
D Home Appliances
List of keys...SortedList2
A
B
C
D
Capacity of SortedList2 = 16
Capacity of SortedList2 (Updated) = 4

まとめ

TrimToSize()メソッドを使うことで、SortedListの容量を実際の要素数にまで縮小できます。要素数が少ない場合でも初期容量や自動拡張によってCapacityが大きくなるため、メモリ使用量を最適化したい場面でこのメソッドが役立ちます。なお、空のSortedListに対してTrimToSize()を呼び出すと、Capacityは既定の初期値に設定される点にも注意してください。

  1. C#のSortedListクラスのCapacityプロパティとは?意味と使い方を解説

    C#のSortedListクラスにおけるCapacityプロパティとはSortedListクラスのCapacity(容量)プロパティは、SortedListが保持できる要素数の最大サイズを示すプロパティです。つまり、内部的に確保されている配列が格納できる要素の総数を表しています。なお、SortedListの既定の容量(デフォルト値)は16に設定されています。要素を追加していき容量を超えると、容量は自動的に拡張される仕組みになっています。以下のコードを実行すると、C#でSortedListクラスのCapacityプロパティを実際に確認できます。コード例using System; using Sy

  2. 【Python Pandas】Indexオブジェクトの一意な要素の数を返す方法(nunique()メソッド)

    PandasでIndexオブジェクトに含まれる一意な(重複しない)要素の数を取得するには、index.nunique()メソッドを使用します。このメソッドは、インデックス内のユニークな値の個数を整数値として返してくれます。まずは、必要なライブラリをインポートしましょう。import pandas as pdPandasインデックスの作成次に、サンプルとなるPandasのインデックスを作成します。index = pd.Index([50, 10, 70, 110, 90, 50, 110, 90, 30])インデックスの表示作成したPandasインデックスを表示してみます。print(Panda