リスト型を使用したデータ コレクションの管理について説明します
このチュートリアルでは C# を対話形式で学習できます。ブラウザーを使用して C# コードを記述し、コードをコンパイルして実行した結果を確認します。 このチュートリアルには、コレクションと配列を作成、変更、確認する一連のレッスンが含まれています。
ヒント
フォーカス モード内にコード スニペットを貼り付けるには、キーボード ショートカット (Ctrl + v、または cmd + v) を使用する必要があります。
リストを作成する
対話型ウィンドウで次のコードを実行します。 [Enter focus mode](フォーカス モードを入力する) ボタンを選択します。 次に、対話型ウィンドウで次のコード ブロックを入力し (<name>
を自分の名前に置き換えて)、[実行] を選択します。
var names = new List<string> { "<name>", "Ana", "Felipe" };
foreach (var name in names)
{
Console.WriteLine($"Hello {name.ToUpper()}!");
}
環境でこれを実行している場合は、代わりにローカル バージョンに関する指示に従ってください。
文字列のリストを作成し、そのリストに 3 つの名前を追加し、それらの名前をすべて大文字で出力しました。 先のチュートリアルで学習した概念を使用して、リストをループしています。
名前を表示するコードは、文字列補間機能を使用します。 string
の前に文字 $
を配置すると、文字列宣言に C# コードを埋め込むことができます。 実際の文字列は、生成する値でその C# コードを置き換えます。 この例では、String.ToUpper メソッドを呼び出したため、文字列は {name.ToUpper()}
をそれぞれの名前に置き換え、文字を大文字に変換しています。
続けて確認していきましょう。
リスト コンテンツを変更する
作成したコレクションは List<T> 型を使用します。 この型は、要素のシーケンスを格納します。 要素の型を山かっこの内側で指定します。
この List<T> 型の重要な点は増減が可能で、要素を追加したり削除したりできることです。 その内容を表示した後で内容を変更することにより、結果を確認できます。 既に記述したコードの下に、次のコードを追加します (内容を出力するループの下)。
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($"The name {names[index]} is at index {index}");
}
var notFound = names.IndexOf("Not Found");
Console.WriteLine($"When an item is not found, IndexOf returns {notFound}");
リストに項目があるかどうかわからないこともあるため、常に IndexOf によって返されるインデックスをチェックする必要があります。 -1
の場合、項目は見つかりませんでした。
同じように、リスト内の項目を並び替えできます。 Sort メソッドは、リスト内のすべての項目を正規順序 (文字列の場合はアルファベット順) で並び替えます。 次のコードを追加し、もう一度実行します。
names.Sort();
foreach (var name in names)
{
Console.WriteLine($"Hello {name.ToUpper()}!");
}
その他の型のリスト
ここまでは、リスト内で string
型を使用してきました。 別の型を使用して List<T> を作成してみましょう。 数値のセットを作成します。 これまでに記述したコードを削除し、次のコードに置き換えます。
var fibonacciNumbers = new List<int> {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);
}
[実行] をクリックして結果を確認します。
課題
このレッスンと以前のレッスンの中から、いくつかの概念を理解できているかどうかを確認してみましょう。 ここまでフィボナッチ数を使用して作成してきたコードを使ってください。 シーケンスの最初の 20 個の数を生成するコードを記述してみましょう。 (ヒント: フィボナッチ数の 20 番目の数は 6765 です。)
課題完了
コードは次のようになりましたか?
var fibonacciNumbers = new List<int> {1, 1};
while (fibonacciNumbers.Count < 20)
{
var previous = fibonacciNumbers[fibonacciNumbers.Count - 1];
var previous2 = fibonacciNumbers[fibonacciNumbers.Count - 2];
fibonacciNumbers.Add(previous + previous2);
}
foreach(var item in fibonacciNumbers)
{
Console.WriteLine(item);
}
ループの繰り返しごとに、リストの最後の 2 つの整数を取得して合計し、その値をリストに追加しています。 このループは、20 個の項目がリストに追加されるまで繰り返されます。
おめでとうございます。
これで、対話型チュートリアルは終了です。 これは、C# の対話型チュートリアルの最後の概要です。 .NET サイトにアクセスして、.NET SDK をダウンロードし、お使いのコンピューター上にプロジェクトを作成し、コーディングを続けることができます。 "次の手順" セクションでは、これらのチュートリアルに戻ります。
.NET コレクションの詳細については、次の記事で学習できます。
このセクションに問題がある場合 このセクションを改善できるよう、フィードバックをお送りください。
.NET