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

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メソッドを使用する。
  1. C#のSortedListクラスとは?特徴と基本的な使い方を解説

    SortedListクラスとは C#のSortedListクラスは、配列とハッシュテーブルを組み合わせたコレクションです。キーと値のペアからなるリストを保持しており、各要素には「キー」または「インデックス」のどちらからでもアクセスできます。 インデックスを使ってアクセスすればArrayListのように振る舞い、キーを使ってアクセスすればHashtableのように振る舞います。最大の特徴は、コレクション内の項目が常にキーの値に基づいて自動的にソートされるという点です。また、キーは重複できず、各キーには1つの値のみが対応します。 例:SortedListに要素を追加する Add()メソッドを使う

  2. 【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