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

【C#】foreachループを使わずにリストを別のリストへコピーする3つの方法

List<T>とは

List<T>は、インデックスでアクセスできる強く型付けされたオブジェクトのコレクションです。並べ替え(ソート)、検索、要素の変更などを行うためのメソッドが用意されており、System.Collections.Generic名前空間に属しています。

List<T>は、非ジェネリックなArrayListのジェネリック版に相当し、IList<T>インターフェイスを実装しています。

主な特徴は以下のとおりです。

  • 指定した型の要素のみを格納でき、コンパイル時の型チェックが行われる
  • ジェネリックであるため、ボックス化・ボックス化解除のオーバーヘッドがない
  • ArrayListよりも高速で、エラーも発生しにくい

要素の追加にはAdd()AddRange()メソッド、あるいはコレクション初期化子構文を使用します。要素へのアクセスは、配列と同じようにインデックスを角かっこで渡す方法(例:myList[0])のほか、for / foreachループやLINQクエリでも可能です。インデックスは0から始まります。

ここでは、foreachループを使わずに元のリストから新しいリストへアイテムをコピーする3つの方法を紹介します。

方法1:コンストラクタを使ってコピーする

List<T>のコンストラクタに既存のリストを渡すことで、すべての要素をコピーした新しいリストを作成できます。最もシンプルで直感的な方法です。

class Program{
    public static void Main(){
        List<int> originalList = new List<int>(){1, 2, 3, 4, 5, 7, 8, 9};
        List<Int32> copy = new List<Int32>(originalList);
        foreach (var item in copy){
            System.Console.WriteLine(item);
        }
        Console.ReadLine();
    }
}

出力結果

1
2
3
4
5
7
8
9

方法2:ToList()メソッドを使ってコピーする

LINQ拡張メソッドであるToList()を使用すると、IEnumerable<T>型のシーケンスから簡単に新しいList<T>を作成できます。using System.Linq; の宣言が必要です。

class Program{
    public static void Main(){
        List<int> originalList = new List<int>() { 1, 2, 3, 4, 5, 7, 8, 9 };
        List<Int32> copy = originalList.ToList();
        foreach (var item in copy){
            System.Console.WriteLine(item);
        }
        Console.ReadLine();
    }
}

出力結果

1
2
3
4
5
7
8
9

方法3:GetRange()メソッドを使って部分的にコピーする

GetRange(開始インデックス, 要素数)を使用すると、元のリストの指定範囲だけをコピーできます。リスト全体ではなく一部だけが必要な場合に便利です。

class Program{
    public static void Main(){
        List<int> originalList = new List<int>() { 1, 2, 3, 4, 5, 7, 8, 9 };
        // インデックス0から3つの要素をコピー
        List<Int32> copy = originalList.GetRange(0, 3);
        foreach (var item in copy){
            System.Console.WriteLine(item);
        }
        Console.ReadLine();
    }
}

出力結果

1
2
3

まとめ

方法特徴
コンストラクタ最もシンプル。リスト全体をコピーする場合に推奨
ToList()LINQを利用。他のLINQ処理と組み合わせやすい
GetRange()指定した範囲のみをコピーしたい場合に有効

用途に応じてこれらの方法を使い分けることで、foreachループを明示的に書かずに効率的にリストをコピーできます。

  1. ウィンドウを表示せずにtkinterでクリップボードの内容を取得する方法

    アプリケーション開発において、クリップボードに格納されている内容を取得したいケースはよくあります。PythonのGUIライブラリ「tkinter」では、clipboard_get()メソッドを使うことで、クリップボード内のテキストデータに簡単にアクセスできます。クリップボードからデータを取得する仕組みclipboard_get()でクリップボードからテキストを取得すると、そのデータはキャッシュメモリ上に保持されます。これにより、プログラムのデバッグや、取得したテキストをフレーム(ウィジェット)上に表示して確認することが可能になります。基本的な流れは以下のとおりです。Tkインスタンスを作成し、ウ

  2. Excelのドロップダウンリストから使用済み項目を自動的に削除する2つの方法

    Excelでデータの入力規則を扱っていると、同じ項目を二重に割り当ててしまうのを防ぐために、ドロップダウンリストから使用済みの項目を削除したい場面があります。たとえば、複数の従業員を異なるシフトに割り振る際、同一人物を複数回割り当てたくないケースが挙げられます。また、試合で選手を各ポジションに配置する際も、一人の選手を一つのポジションにしか割り当てられないという状況があります。こうした場合、ドロップダウンリストから一度選択した名前が自動的に消えてくれると非常に便利です。本記事では、Excelのドロップダウンリストから使用済み項目を削除する方法をわかりやすく解説します。 Excelでドロップダ