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

【C#】StringCollectionで要素が最初に出現するインデックスを取得する方法

C#のStringCollectionクラスには、指定した文字列がコレクション内で最初に出現するインデックスを取得するためのIndexOfメソッドが用意されています。この記事では、IndexOfメソッドの基本的な使い方を、サンプルコードと実行結果をもとにわかりやすく解説します。

IndexOfメソッドとは

IndexOfメソッドは、引数に指定した文字列がStringCollection内で最初に見つかった位置を、0から始まるインデックスとして返します。重複する要素が存在する場合でも、必ず先頭側の出現位置が返される点がポイントです。また、該当する要素が見つからなかった場合は -1 が返されます。

サンプルコード1:基本的な使い方

まずは、基本的な使用例を見てみましょう。

using System;
using System.Collections.Specialized;

public class Demo {
   public static void Main() {
      StringCollection strCol = new StringCollection();
      strCol.Add("Accessories");
      strCol.Add("Books");
      strCol.Add("Electronics");
      strCol.Add("Books");

      Console.WriteLine("StringCollectionの要素...");
      foreach (string res in strCol) {
         Console.WriteLine(res);
      }

      // インデックス2の位置に "Headphone" を挿入
      strCol.Insert(2, "Headphone");
      Console.WriteLine("StringCollectionの要素...更新後");
      foreach (string res in strCol) {
         Console.WriteLine(res);
      }

      Console.WriteLine("「Books」が最初に出現するインデックス = " + strCol.IndexOf("Books"));
   }
}

実行結果

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

StringCollectionの要素...
Accessories
Books
Electronics
Books
StringCollectionの要素...更新後
Accessories
Books
Headphone
Electronics
Books
「Books」が最初に出現するインデックス = 1

コードの解説

この例では、まず4つの文字列をAddメソッドで追加しています。この時点で「Books」はインデックス1と3の2か所に存在します。続いてInsertメソッドにより、インデックス2の位置に「Headphone」を挿入し、要素数は5になりました。

最後にIndexOf("Books")を呼び出すと、「Books」は複数存在しますが、最初に出現する位置であるインデックス1が返されていることが確認できます。

サンプルコード2:AddRangeで配列から一括追加した場合

次に、AddRangeメソッドを使って文字列配列の内容をまとめて追加し、そこからインデックスを検索する例です。

using System;
using System.Collections.Specialized;

public class Demo {
   public static void Main() {
      StringCollection strCol = new StringCollection();
      String[] strArr = new String[] { "A", "B", "C", "D", "E", "F", "D", "H" };

      Console.WriteLine("配列の要素...");
      foreach (string str in strArr) {
         Console.WriteLine(str);
      }

      // 配列の内容を一括で追加
      strCol.AddRange(strArr);

      Console.WriteLine("インデックス5の要素 = " + strCol[5]);
      Console.WriteLine("StringCollection内の文字列数 = " + strCol.Count);
      Console.WriteLine("「D」が最初に出現するインデックス = " + strCol.IndexOf("D"));
   }
}

実行結果

配列の要素...
A
B
C
D
E
F
D
H
インデックス5の要素 = F
StringCollection内の文字列数 = 8
「D」が最初に出現するインデックス = 3

コードの解説

AddRangeメソッドを使うことで、配列の全要素をループ処理なしで一括登録できます。登録後のコレクションでは「D」がインデックス3と6の2か所に存在しますが、IndexOf("D")最初の出現位置である3を返します。

また、インデクサstrCol[5]で特定位置の要素を直接参照できることや、Countプロパティで要素数を取得できることも併せて確認できます。

まとめ

  • StringCollection.IndexOfメソッドで、指定した文字列の最初の出現インデックスを取得できる。
  • インデックスは0始まりで返され、要素が見つからない場合は-1が返る。
  • 重複要素があっても、常に先頭側の位置が返される。

要素の検索や位置確認が必要な場面で、IndexOfメソッドは非常に便利です。ぜひ活用してみてください。

  1. Pythonでリスト内の最初の非ゼロ(0以外)の数値を見つける方法

    この記事では、Pythonを使って、与えられた数値のリストの中から最初に現れる非ゼロ(0以外)の数値を見つける方法を解説します。 リストの先頭に複数のゼロが含まれている場合などに、最初の有効な数値がどの位置にあるのかを効率的に特定するテクニックとして、2つのアプローチを紹介します。 方法1:enumerateとnextを組み合わせる まずenumerate関数を使ってリストの各要素とそのインデックスを取得し、次にnext関数を適用することで、条件を満たす最初の非ゼロ要素の位置を取得します。この方法では、ジェネレーター式を用いて簡潔に記述できるのが特徴です。 コード例 listA = [0,

  2. RediSearch 2.0、最初のマイルストーンに到達 ― データ自動インデックス化の新アーキテクチャ

    RediSearch 2.0の開発における最初のマイルストーンとなるリリースをお知らせできることを大変うれしく思います。RediSearchはリアルタイム検索エンジンで、Redis上のデータに対してクエリを実行し、幅広い種類の複雑な問い合わせに答えることができます。このマイルストーンは「2.0-M01」と呼ばれ、インデックスとデータの同期方法が再設計されたことを示しています。従来のようにFT.ADDコマンドを使ってインデックス経由でデータを書き込む必要はなくなり、RediSearchがハッシュに書き込まれたデータを追跡して、自動的にインデックス化するようになりました。この大きなメリットは、アプ