C#でStringCollection内の指定したオブジェクトのインデックスを検索する方法
C#のコレクション(StringCollection)から指定したオブジェクトのインデックス位置を取得するには、IndexOf()メソッドを使用します。このメソッドは、指定した文字列が最初に見つかった位置の0から始まるインデックスを返し、見つからなかった場合は-1を返します。
以下に具体的なコード例を示します。
例1:IndexOf()メソッドでオブジェクトのインデックスを取得する
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 elements...");
foreach (string res in strCol) {
Console.WriteLine(res);
}
strCol.Insert(2, "Headphone");
Console.WriteLine("StringCollection elements...UPDATED");
foreach (string res in strCol) {
Console.WriteLine(res);
}
Console.WriteLine("Index of specific object Electronics? = "+strCol.IndexOf("Electronics"));
}
}出力結果
上記のコードを実行すると、次のような出力が得られます。
StringCollection elements... Accessories Books Electronics Books StringCollection elements...UPDATED Accessories Books Headphone Electronics Books Index of specific object Electronics? = 3
この例では、まず4つの要素を持つStringCollectionを作成し、その後Insert()メソッドを使ってインデックス2の位置に「Headphone」を挿入しています。挿入後、「Electronics」の位置が1つ後ろにずれるため、IndexOf("Electronics")は3を返します。
例2:存在しない要素を検索した場合
続いて、配列の要素をまとめて追加し、存在する要素と存在しない要素の両方でインデックスを検索する例を見てみましょう。
using System;
using System.Collections.Specialized;
public class Demo {
public static void Main() {
StringCollection stringCol = new StringCollection();
String[] arr = new String[] { "100", "200", "300", "400", "500" };
Console.WriteLine("Array elements...");
foreach (string res in arr) {
Console.WriteLine(res);
}
stringCol.AddRange(arr);
Console.WriteLine("Does the specified string is in the StringCollection? = "+stringCol.Contains("800"));
Console.WriteLine("Total number of elements = "+stringCol.Count);
Console.WriteLine("Iterating through StringCollection = "+stringCol.Count);
StringEnumerator myenum = stringCol.GetEnumerator();
while (myenum.MoveNext())
Console.WriteLine(myenum.Current);
Console.WriteLine("Index of specific object 500? = "+stringCol.IndexOf("500"));
Console.WriteLine("Index of specific object 1000? = "+stringCol.IndexOf("1000"));
}
}出力結果
上記のコードを実行すると、次のような出力が得られます。
Array elements... 100 200 300 400 500 Does the specified string is in the StringCollection? = False Total number of elements = 5 Iterating through StringCollection = 5 100 200 300 400 500 Index of specific object 500? = 4 Index of specific object 1000? = -1
ポイントの解説
- AddRange()メソッドを使うと、文字列配列の全要素を一括してコレクションに追加できます。
- Contains()メソッドは、指定した文字列がコレクション内に存在するかどうかを真偽値(true/false)で返します。この例では「800」は存在しないためFalseが出力されています。
- Countプロパティで、コレクション内の要素数を取得できます。
- GetEnumerator()で列挙子を取得すれば、whileループによる反復処理も可能です。
IndexOf("500")は最後の要素なので4を返します。一方、存在しない「1000」を検索した場合は-1が返される点に注意してください。
このように、IndexOf()メソッドの戻り値が-1かどうかを判定することで、要素の存在確認と位置の特定を同時に行うことができます。
-
C#でSortedSetオブジェクトが指定されたコレクションの真の上位集合(Proper Superset)かどうかを確認する方法
C#のSortedSet<T>クラスでは、IsProperSupersetOfメソッドを使うことで、あるSortedSetオブジェクトが指定されたコレクションの「真の上位集合(Proper Superset)」であるかどうかを簡単に確認できます。 真の上位集合とは、相手のコレクションに含まれるすべての要素を持ち、かつ相手とは異なる要素を少なくとも1つ以上含む集合のことです。つまり、set2がset1の真の上位集合であるための条件は、「set1の全要素がset2に含まれる」かつ「set2はset1よりも厳密に多くの要素を持つ」となります。条件を満たす場合はtrue、満たさない場合はf
-
【C#】SortedSetオブジェクトが指定されたコレクションの真部分集合かどうかを確認する方法
C#では、SortedSet<T>クラスに用意されているIsProperSubsetOfメソッドを使うことで、あるSortedSetオブジェクトが指定されたコレクションの真部分集合(プロパー・サブセット)であるかどうかを簡単に確認できます。 真部分集合とは、基準となるコレクションのすべての要素を含みながら、そのコレクションそのものとは一致しない集合のことです。つまり、2つのセットがまったく同じ要素を持つ場合は、たとえ一方が他方の部分集合であっても「真部分集合」にはなりません。このメソッドは条件を満たす場合にtrue、満たさない場合にfalseを返します。 例1:真部分集合であるケー