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

【C#】Listから指定範囲の要素を一括削除する方法(RemoveRangeメソッド)

C#のList<T>から複数の要素をまとめて削除したい場合は、RemoveRangeメソッドを使用します。この記事では、RemoveRangeメソッドの基本的な使い方を、実際に動作するサンプルコードと出力結果をもとにわかりやすく解説します。

RemoveRangeメソッドとは

RemoveRangeメソッドは、リスト内の指定した位置から連続する複数の要素を一度に削除できるメソッドです。書式は以下のとおりです。

list.RemoveRange(開始インデックス, 削除する要素数);
  • 第1引数: 削除を開始する要素のインデックス(0から始まる)
  • 第2引数: 削除する要素の個数

例えば list.RemoveRange(1, 3); と記述すると、インデックス1の要素から3個分の要素が削除されます。

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

まずは、2つのリストを作成し、片方のリストに対してRemoveRangeメソッドを呼び出す基本的な例を見てみましょう。

using System;
using System.Collections.Generic;
public class Demo {
   public static void Main(String[] args){
      List<string> list1 = new List<string>();
      list1.Add("One");
      list1.Add("Two");
      list1.Add("Three");
      list1.Add("Four");
      list1.Add("Five");
      Console.WriteLine("Elements in List1...");
      foreach (string res in list1){
         Console.WriteLine(res);
      }
      List<string> list2 = new List<string>();
      list2.Add("India");
      list2.Add("US");
      list2.Add("UK");
      list2.Add("Canada");
      list2.Add("Poland");
      list2.Add("Netherlands");
      Console.WriteLine("Elements in List2...");
      foreach (string res in list2){
         Console.WriteLine(res);
      }
      Console.WriteLine("\nIs List2 equal to List1? = "+list2.Equals(list1));
      Console.WriteLine("\nCount of elements in list2 = "+list2.Count);
      list2.RemoveRange(1,3);
      Console.WriteLine("\nCount of elements in list2 (updated) = "+list2.Count);
      Console.WriteLine("Elements in List2... UPDATED");
      foreach (string res in list2){
         Console.WriteLine(res);
      }
   }
}

実行結果

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

Elements in List1...
One
Two
Three
Four
Five
Elements in List2...
India
US
UK
Canada
Poland
Netherlands

Is List2 equal to List1? = False

Count of elements in list2 = 6
Count of elements in list2 (updated) = 3
Elements in List2... UPDATED
India
Poland
Netherlands

この例では、6個の要素を持つlist2に対して RemoveRange(1, 3) を呼び出しています。その結果、インデックス1〜3に相当する「US」「UK」「Canada」の3要素が削除され、要素数が6から3に減少していることが確認できます。

サンプルコード2:RemoveRangeを複数回呼び出す

続いて、同じリストに対してRemoveRangeメソッドを複数回呼び出す例を見てみましょう。

using System;
using System.Collections.Generic;
public class Demo {
   public static void Main(String[] args){
      List<string> list = new List<string>();
      list.Add("India");
      list.Add("US");
      list.Add("UK");
      list.Add("Canada");
      list.Add("Poland");
      list.Add("Netherlands");
      list.Add("Bhutan");
      list.Add("Singapore");
      Console.WriteLine("Elements in List...");
      foreach (string res in list){
         Console.WriteLine(res);
      }
      Console.WriteLine("\nCount of elements in list = "+list.Count);
      list.RemoveRange(1,3);
      Console.WriteLine("\nCount of elements in list2 (updated) = "+list.Count);
      Console.WriteLine("Elements in List... UPDATED");
      foreach (string res in list){
         Console.WriteLine(res);
      }
      list.RemoveRange(2,3);
      Console.WriteLine("\nCount of elements in list2 (updated) = "+list.Count);
      Console.WriteLine("Elements in List... UPDATED");
      foreach (string res in list){
         Console.WriteLine(res);
      }
   }
}

実行結果

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

Elements in List...
India
US
UK
Canada
Poland
Netherlands
Bhutan
Singapore

Count of elements in list = 8

Count of elements in list2 (updated) = 5
Elements in List... UPDATED
India
Poland
Netherlands
Bhutan
Singapore
Count of elements in list2 (updated) = 2
Elements in List... UPDATED
India
Poland

最初の8個の要素から RemoveRange(1, 3) で「US」「UK」「Canada」が削除され5個になります。さらに RemoveRange(2, 3) を呼び出すことで「Netherlands」「Bhutan」「Singapore」も削除され、最終的に「India」と「Poland」の2要素だけが残ります。

まとめ

C#でListから範囲を指定して要素を削除するには、RemoveRangeメソッドが便利です。開始インデックスと削除する要素数を指定するだけで、ループ処理を書かずに複数の要素を一括で削除できます。なお、指定したインデックスや要素数がリストの範囲外の場合はArgumentOutOfRangeExceptionがスローされるため、呼び出し前にリストの要素数を確認しておくと安全です。

  1. JavaScriptでリンクリストから要素を削除する方法

    リンクリストから要素を削除する基本の考え方 リンクリスト(連結リスト)から要素を削除する処理は非常にシンプルです。削除したいノードへの参照を失う(参照を切り離す)だけで実現できます。ただし、削除する位置によって処理が異なるため、次の3つのケースを考慮する必要があります。 ケース1:先頭(ヘッド)から削除する場合 先頭の要素を削除する場合は、head = head.next と代入するだけでOKです。これにより最初のノードへの参照が失われ、headは2番目のノードを指すようになります。 ケース2:末尾(テール)から削除する場合 末尾の要素を削除する場合は、最後から2番目のノードの node.ne

  2. JavaでArrayListから重複要素を削除する方法【Set・Stream API活用】

    JavaのSetインターフェースは、重複する要素を許容しないという特徴を持っています。このインターフェースのadd()メソッドは引数として受け取った要素をSetオブジェクトに追加し、追加が成功すればtrueを返します。一方、すでに存在する要素を追加しようとした場合、追加操作は失敗しfalseが返されます。この性質を利用することで、ArrayList内の重複要素を簡単に取り除くことができます。 Setを使って重複を削除する基本手順 ArrayListオブジェクトから冗長な要素を削除するには、以下の手順に従います。 対象となるArrayListを作成(または取得)します。 空のSetオブジェクト