C#のSortedListで指定した値のインデックスを取得する方法(IndexOfValueメソッド)
C#のSortedListコレクションでは、IndexOfValueメソッドを使うことで、指定した値に対応するインデックス番号を取得できます。この記事では、実際のコード例とその実行結果をもとに、使い方をわかりやすく解説します。
IndexOfValueメソッドとは
IndexOfValueは、引数に渡した値がSortedList内のどの位置(0から始まるインデックス)にあるかを返すメソッドです。SortedListはキーによって自動的にソートされているため、返されるインデックスはキーの並び順に基づいた位置になります。該当する値が存在しない場合は-1が返されます。
サンプルコード1:数値の値からインデックスを取得する
まず、基本的な使用例を見てみましょう。
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 の要素...");
foreach(DictionaryEntry d in list1) {
Console.WriteLine(d.Key + " " + d.Value);
}
Console.Write("値 7 のインデックス = "+list1.IndexOfValue(7));
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("\n\nSortedList2 の要素...");
foreach(DictionaryEntry d in list2) {
Console.WriteLine(d.Key + " " + d.Value);
}
Console.Write("値 Books のインデックス = "+list2.IndexOfValue("Books"));
}
}実行結果1
上記のコードを実行すると、次のような出力が得られます。
SortedList1 の要素... Eight 8 Five 5 Four 4 Nine 9 One 1 Seven 7 Six 6 Ten 10 Three 3 Two 2 値 7 のインデックス = 5 SortedList2 の要素... A Accessories B Books C Smart Wearable Tech D Home Appliances 値 Books のインデックス = 1
結果のポイント
注目すべき点として、SortedListはキーをアルファベット順に自動ソートします。たとえば「Seven」というキーは「Eight」「Five」「Four」「Nine」「One」より後ろにあるため、値7のインデックスは5となります。同様に、list2では「Books」はキーBの位置、つまりインデックス1にあることがわかります。
サンプルコード2:文字列の値から複数のインデックスを取得する
続いて、別の例です。部署名を値としたSortedListから、複数の値に対するインデックスを一度に取得しています。
using System;
using System.Collections;
public class Demo {
public static void Main(String[] args) {
SortedList list = new SortedList();
list.Add("One", "Finance");
list.Add("Two", "Marketing");
list.Add("Three", "Sales");
list.Add("Four", "Purchase");
list.Add("Five", "Operations");
list.Add("Six", "IT");
Console.WriteLine("SortedList の要素...");
foreach(DictionaryEntry d in list) {
Console.WriteLine(d.Key + " " + d.Value);
}
Console.WriteLine("\n値 Marketing のインデックス = "+list.IndexOfValue("Marketing"));
Console.WriteLine("値 Purchase のインデックス = "+list.IndexOfValue("Purchase"));
Console.WriteLine("値 Sales のインデックス = "+list.IndexOfValue("Sales"));
Console.WriteLine("値 IT のインデックス = "+list.IndexOfValue("IT"));
Console.WriteLine("値 Operations のインデックス = "+list.IndexOfValue("Operations"));
}
}実行結果2
このコードの出力は以下の通りです。
SortedList の要素... Five Operations Four Purchase One Finance Six IT Three Sales Two Marketing 値 Marketing のインデックス = 5 値 Purchase のインデックス = 1 値 Sales のインデックス = 4 値 IT のインデックス = 3 値 Operations のインデックス = 0
結果の解説
キーがアルファベット順(Five → Four → One → Six → Three → Two)に並べ替えられているため、各値のインデックスもその並び順に対応しています。たとえば最初のキー「Five」に紐づく「Operations」はインデックス0、「Marketing」は最後のキー「Two」に紐づくためインデックス5となっています。
まとめ
IndexOfValueメソッドを使うと、SortedList内の指定した値のインデックス(0始まり)を取得できる。- SortedListはキーで自動的にソートされるため、インデックスは挿入順ではなくキーのソート順に基づく。
- 値が見つからない場合は-1が返される。
- 逆に、キーからインデックスを取得したい場合は
IndexOfKeyメソッドを使用する。
-
C#のSortedListクラスとは?特徴と基本的な使い方を解説
SortedListクラスとは C#のSortedListクラスは、配列とハッシュテーブルを組み合わせたコレクションです。キーと値のペアからなるリストを保持しており、各要素には「キー」または「インデックス」のどちらからでもアクセスできます。 インデックスを使ってアクセスすればArrayListのように振る舞い、キーを使ってアクセスすればHashtableのように振る舞います。最大の特徴は、コレクション内の項目が常にキーの値に基づいて自動的にソートされるという点です。また、キーは重複できず、各キーには1つの値のみが対応します。 例:SortedListに要素を追加する Add()メソッドを使う
-
【Python・Pandas】IndexオブジェクトのNaN値をfillna()で指定した値に置き換える方法
PandasのIndexオブジェクトのNaN値を指定した値で埋める方法PandasのIndexオブジェクトに含まれるNaN(欠損値)を任意の値で置き換えるには、index.fillna()メソッドを使用します。SeriesやDataFrameと同様に、Indexオブジェクトでも欠損値の補完が可能です。まず、必要なライブラリをインポートします。import pandas as pd import numpy as npNaN値を含むインデックスの作成続いて、NaN値をいくつか含むPandasインデックスを作成します。index = pd.Index([50, 10, 70, np.nan, 90