次の方法で共有


C で List<T> を使用してデータ コレクションを管理する方法について説明します#

この入門チュートリアルでは、C# 言語の概要とクラスの基本について説明します。

このチュートリアルでは、ブラウザーを使用して C# コードを記述し、コードをコンパイルして実行した結果を確認しながら、C# について対話形式で説明します。 コレクションと配列を作成、変更、探索する一連のレッスンが含まれています。 主に List<T> クラスを使用します。

基本的なリストの例

ヒント

コード スニペット ブロックに [実行] ボタンが含まれている場合、そのボタンによって対話型ウィンドウが開くか、対話型ウィンドウ内の既存のコードが置き換えられます。 スニペットに [実行] ボタンが含まれていない場合は、コードをコピーして現在の対話型ウィンドウに追加できます。

対話型ウィンドウで次のコードを実行します。 <name>を自分の名前に置き換え、[実行] を選択します。

List<string> names = ["<name>", "Ana", "Felipe"];
foreach (var name in names)
{
    Console.WriteLine($"Hello {name.ToUpper()}!");
}

文字列のリストを作成し、そのリストに 3 つの名前を追加し、すべての CAPS に名前を出力しました。 前のチュートリアルで学習した概念を使用して、一覧をループします。

名前を表示するコードでは、 文字列補間 機能が使用されます。 stringの前に$文字を付けると、文字列宣言に C# コードを埋め込むことができます。 実際の文字列は、その C# コードを生成した値に置き換えます。 この例では、{name.ToUpper()} メソッドを呼び出したため、String.ToUpperを各名前に置き換え、大文字に変換します。

調査を続けましょう。

リストの内容を変更する

作成したコレクションは、 List<T> 型を使用します。 この型は、要素のシーケンスを格納します。 山括弧の間にある要素のタイプを指定します。

この List<T> 型の重要な側面の 1 つは、要素を追加または削除できるようにすることです。 内容を表示した後で内容を変更すると、結果を確認できます。 既に記述したコード (内容を出力するループ) の後に、次のコードを追加します。

Console.WriteLine();
names.Add("Maria");
names.Add("Bill");
names.Remove("Ana");
foreach (var name in names)
{
    Console.WriteLine($"Hello {name.ToUpper()}!");
}

リストの末尾にさらに 2 つの名前を追加しました。 また、1 つも削除しました。 このコード ブロックからの出力は、最初の内容を示し、空白行と新しい内容を出力します。

List<T>を使用すると、インデックスによって個々の項目を参照することもできます。 [トークンと]トークンを使用してアイテムにアクセスします。 既に記述したコードの後に次のコードを追加して試してください。

Console.WriteLine($"My name is {names[0]}.");
Console.WriteLine($"I've added {names[2]} and {names[3]} to the list.");

リストの末尾を越えてアクセスすることはできません。 リストが Count プロパティを使用している期間を確認できます。 次のコードを追加します。

Console.WriteLine($"The list has {names.Count} people in it");

[実行] をもう一度選択して、結果を表示します。 C# では、インデックスは 0 から始まるため、有効な最大インデックスはリスト内の項目数より 1 つ小さくなります。

リストの検索と並べ替え

サンプルでは比較的小さなリストを使用していますが、アプリケーションでは多くの要素を含むリストが作成される場合があります。場合によっては数千単位で番号が付けられます。 これらの大きなコレクション内の要素を検索するには、一覧でさまざまな項目を検索する必要があります。 IndexOf メソッドは、項目を検索し、項目のインデックスを返します。 項目がリストにない場合は、 IndexOf-1を返します。 それがどのように動作するかを確認するためにそれを試してみてください。 これまでに記述したコードの後に次のコードを追加します。

var index = names.IndexOf("Felipe");
if (index == -1)
{
    Console.WriteLine($"When an item is not found, IndexOf returns {index}");
}
else
{
    Console.WriteLine($"The name {names[index]} is at index {index}");
}

index = names.IndexOf("Not Found");
if (index == -1)
{
    Console.WriteLine($"When an item is not found, IndexOf returns {index}");
}
else
{
    Console.WriteLine($"The name {names[index]} is at index {index}");
}

項目がリストに含まれているかどうかは不明な場合があるため、常に IndexOfによって返されるインデックスを確認する必要があります。 -1されている場合、項目は見つかりませんでした。

リスト内の項目も並べ替えることができます。 Sort メソッドは、リスト内のすべての項目を通常の順序 (文字列の場合はアルファベット順) で並べ替えます。 このコードを追加して、もう一度実行します。

names.Sort();
foreach (var name in names)
{
    Console.WriteLine($"Hello {name.ToUpper()}!");
}

その他の種類のリスト

これまで、リストで string 型を使用してきました。 別の型を使用して List<T> を作成してみましょう。 一連の数値を作成しましょう。 これまでに記述したコードを削除し、次のコードに置き換えます。

List<int> fibonacciNumbers = [1, 1];

これは整数のリストを作成し、最初の 2 つの整数を値 1 に設定します。 フィボナッチ・シーケンスは、数字のシーケンスで始まり、2つの1から始まります。 各次のフィボナッチ数は、前の2つの数値の合計を取ることによって見つかります。 次のコードを追加します。

var previous = fibonacciNumbers[fibonacciNumbers.Count - 1];
var previous2 = fibonacciNumbers[fibonacciNumbers.Count - 2];

fibonacciNumbers.Add(previous + previous2);

foreach (var item in fibonacciNumbers)
{
    Console.WriteLine(item);
}

Run キーを押して結果を表示します。

課題

このレッスンと以前のレッスンの概念の一部をまとめることができるかどうかを確認します。 フィボナッチ数でこれまでに構築した内容を拡張します。 シーケンス内の最初の 20 個の数値を生成するコードを記述してみてください。 (ヒントとして、20番目のフィボナッチ数は6765です。

このようなものを思いついたのですか?

:::code language="csharp" interactive="try-dotnet-method" source="./snippets/ListCollection/Program.cs" id="Answer":::

ループの各反復では、リスト内の最後の 2 つの整数を取得し、それらを合計し、その値をリストに追加します。 ループは、リストに 20 個の項目を追加するまで繰り返されます。

C# 対話型チュートリアルの最終入門であるリスト対話型チュートリアルを完了しました。 .NET サイトにアクセスして .NET SDK をダウンロードし、コンピューター上にプロジェクトを作成し、コーディングを続けることができます。 「次のステップ」セクションでは、これらのチュートリアルに戻ります。 または、「 クラスとオブジェクトを使用したオブジェクト指向プログラミングの探索 」チュートリアルに進むことができます。

.NET コレクションの詳細については、次の記事を参照してください。