C#でコレクションの指定したインデックスの要素を削除する方法(RemoveAtメソッド)
C#のCollection<T>クラスで、指定されたインデックス位置にある要素を削除するには、RemoveAt()メソッドを使用します。インデックスは0から始まり、要素を削除すると残りの要素は自動的に前方へ詰め直されます。
まずは、1つの要素を削除する基本的な例から見ていきましょう。
例1:指定したインデックスの要素を削除する
using System;
using System.Collections.ObjectModel;
public class Demo {
public static void Main() {
Collection<string> col = new Collection<string>();
col.Add("Andy");
col.Add("Kevin");
col.Add("John");
col.Add("Kevin");
col.Add("Mary");
col.Add("Katie");
col.Add("Barry");
col.Add("Nathan");
col.Add("Mark");
Console.WriteLine("要素数 = " + col.Count);
Console.WriteLine("コレクションを反復処理します...");
var enumerator = col.GetEnumerator();
while (enumerator.MoveNext()) {
Console.WriteLine(enumerator.Current);
}
// インデックス3(4番目)の要素を削除
col.RemoveAt(3);
Console.WriteLine("更新後の要素数 = " + col.Count);
Console.WriteLine("更新後のコレクションを反復処理します...");
enumerator = col.GetEnumerator();
while (enumerator.MoveNext()) {
Console.WriteLine(enumerator.Current);
}
}
}
出力結果
要素数 = 9 コレクションを反復処理します... Andy Kevin John Kevin Mary Katie Barry Nathan Mark 更新後の要素数 = 8 更新後のコレクションを反復処理します... Andy Kevin John Mary Katie Barry Nathan Mark
この例では、RemoveAt(3)によってインデックス3、つまり4番目の要素「Kevin」が削除され、要素数が9から8に減少していることが確認できます。
例2:複数の要素を順に削除する
続いて、RemoveAt()を繰り返し呼び出して、複数の要素を削除する例を見てみましょう。
using System;
using System.Collections.ObjectModel;
public class Demo {
public static void Main() {
Collection<string> col = new Collection<string>();
col.Add("One");
col.Add("Two");
col.Add("Three");
col.Add("Four");
col.Add("Five");
col.Add("Six");
Console.WriteLine("要素数 = " + col.Count);
Console.WriteLine("コレクションを反復処理します...");
var enumerator = col.GetEnumerator();
while (enumerator.MoveNext()) {
Console.WriteLine(enumerator.Current);
}
col.RemoveAt(1); // 「Two」を削除
col.RemoveAt(2); // 「Four」を削除
col.RemoveAt(3); // 「Six」を削除
Console.WriteLine("更新後の要素数 = " + col.Count);
Console.WriteLine("更新後のコレクションを反復処理します...");
enumerator = col.GetEnumerator();
while (enumerator.MoveNext()) {
Console.WriteLine(enumerator.Current);
}
}
}
出力結果
要素数 = 6 コレクションを反復処理します... One Two Three Four Five Six 更新後の要素数 = 3 更新後のコレクションを反復処理します... One Three Five
ここでの重要なポイントは、要素を削除するたびにインデックスが振り直されるという点です。
初期状態は「One, Two, Three, Four, Five, Six」ですが、RemoveAt(1)で「Two」が削除されると「One, Three, Four, Five, Six」となります。続くRemoveAt(2)では、新しくインデックス2となった「Four」が削除され、最後のRemoveAt(3)で「Six」が削除されます。その結果、「One, Three, Five」だけが残ります。
RemoveAt()メソッドを使う際のポイント
- インデックスは0始まり:先頭の要素がインデックス0として扱われます。
- 自動的な詰め直し:要素を削除すると、それ以降の要素が前へ移動し、Countプロパティの値も1減少します。
- 範囲外アクセスに注意:存在しないインデックスを指定すると、ArgumentOutOfRangeExceptionがスローされます。
- List<T>でも同様に使用可能:List<T>クラスにも同じRemoveAt()メソッドが用意されており、同じ書き方で利用できます。
-
C#でHashSetに指定された要素が含まれているか確認する方法
C#のHashSet<T>に特定の要素が含まれているかどうかを確認するには、Contains()メソッドを使用します。このメソッドは、指定した要素がHashSet内に存在する場合はtrue、存在しない場合はfalseを返します。Contains()メソッドの基本構文public bool Contains (T item);引数には検索対象の要素を渡します。HashSetはハッシュテーブルを基盤としているため、要素の検索はO(1)の計算量で実行でき、非常に高速です。例1:数値型のHashSetでContains()を使う以下は、int型のHashSetに対してContains()メ
-
C#でHashSetと指定されたコレクションに共通の要素があるか確認する方法
C#において、HashSetと指定されたコレクションとの間に共通の要素が存在するかどうかを確認したい場合は、Overlaps() メソッドを使用します。Overlaps() メソッドは、HashSetと引数で渡されたコレクションの間に共通する要素が1つでも存在すれば true を返し、まったく存在しなければ false を返します。このメソッドは System.Collections.Generic 名前空間に含まれており、引数として IEnumerable<T> 型のコレクションを受け取ります。例1:int型のHashSetの場合まずは、整数値を格納した2つのHashSetで共通