フッターコンテンツにスキップ
Iron Academy Logo
C#を学ぶ
C#を学ぶ

その他のカテゴリー

C#を理解する リスト

Layla Porter
14分6秒

C#のListクラスは、汎用性の高いコレクション型です。 内部データ構造として動的配列をベースにしており、要素の効率的な操作が可能です。 リストを作成する際、デフォルトの初期容量を指定することで、最初からメモリ使用量を最適化することができます。 この容量は、メモリを再割り当てせずにリストが最初に保持できる要素の数です。

レイラ・ポーターのビデオ"C# for Beginners Part 7 - Querying Data with LINQ"では、C#のリストの機能を深く掘り下げ、LINQ(言語統合クエリ)を活用してデータを効率的にクエリする方法を実演しています。 この記事では、Layla のビデオに登場する主要な概念と例を分解し、初心者向けに C# リストの包括的な理解を提供します。

C#リスト入門

ビデオの冒頭(0:03)でレイラが述べているように、C#のリストは、開発者が要素のコレクションを保存し、操作することを可能にする汎用性の高いデータ構造です。 配列とは異なり、リストは動的にサイズを変更できるため、要素の数が前もってわからないシナリオに最適です。

リストの使い方は簡単です。 Add メソッドを使用して要素を追加することができ、指定したオブジェクトをリストの最後に追加します。リストはゼロベースのインデックスを使用します。つまり、最初の要素はインデックス0でアクセスされます。また、角括弧(˶[˶])表記を使用して、指定されたインデックスで要素にアク セスすることもできます。

リストを繰り返し処理するには、foreachループを使用します。 特定の要素の最初の出現を見つける必要がある場合、指定された条件に基づいて検索する述語を持つIndexOfのようなメソッドを使用することができます。

リストは強く型付けされており、特定の型(T)のオブジェクトを保持します。 これにより、型の安全性が確保され、指定されたオブジェクト型で定義されたメソッドやプロパティの使用が可能になります。 デフォルトでは、Listは要素を効率的に整理するためにデフォルトのハッシュ関数を使用します。

Laylaがビデオで実演したListとListクラスのメソッドの動作を詳しく見てみましょう。

リストの作成

C#でリストを作成する場合、内部データ構造を最適化するために、指定の初期容量を設定することができます。 リストは汎用性が高く、指定した要素のコレクションから初期化することができます。 int インデックスを使用して項目にアクセスし、foreach ループを使用して項目を反復処理できます。辞書とは異なり、リストはデフォルトのハッシュ関数に依存せず、強く型付けされたオブジェクトを格納するため、データ管理における型の安全性と一貫性が保証されます。

(0:44)では、Laylaがチーズのリストを作成し、リストを初期化して入力する方法を説明します。C#では、リストはListクラスを使用して作成することができ、Tはリストに含まれる要素のタイプを表します。

List<Cheese> cheeseList = new List<Cheese>
{
    new Cheese(1, "Stilton", 3.0m, 5),
    new Cheese(2, "Cheddar", 2.25m, 3),
    new Cheese(3, "Pineapple", 3.5m, 1),
    new Cheese(4, "Brie", 5.5m, 2),
    new Cheese(5, "Roquefort", 3.5m, 5),
};
List<Cheese> cheeseList = new List<Cheese>
{
    new Cheese(1, "Stilton", 3.0m, 5),
    new Cheese(2, "Cheddar", 2.25m, 3),
    new Cheese(3, "Pineapple", 3.5m, 1),
    new Cheese(4, "Brie", 5.5m, 2),
    new Cheese(5, "Roquefort", 3.5m, 5),
};

上記の例では、LaylaがCheeseオブジェクトでリストを埋めます。 彼女は、C#でリストの作成と初期化を実演しながら、Cheeseクラスに対応する各チーズオブジェクトのID、名前、価格、強度などのプロパティを指定します。

チーズのリストを反復して ID と名前を印刷する

Layla PorterはcheeseListを反復処理して、各チーズのIDと名前のみを出力するためにforeachループを使用する方法を示しています。 以下は、コードと説明です:

foreach (var cheese in cheeseList)
{
    Console.WriteLine($"ID: {cheese.ID}, Name: {cheese.Name}");
}
foreach (var cheese in cheeseList)
{
    Console.WriteLine($"ID: {cheese.ID}, Name: {cheese.Name}");
}

上記のコードでは、LaylaがcheeseListをトラバースするためにforeachループを使用しています。 これによりリストのすべての要素が出力されます。ループはリスト内の各チーズオブジェクトを通過します。各イテレーションで、変数cheeseが指定されたインデックスの現在のチーズオブジェクトを保持します。 Console.WriteLineを使用して、彼女は各チーズ要素のIDと名前プロパティを出力し、C#でリストから特定の要素にアクセスして表示する方法を説明します。

LINQクエリを使用したチーズの検索

2:45からのビデオでは、Layla PorterがLINQを使って、ユーザー入力に基づいて特定のチーズを検索する方法を実演しています。 彼女はユーザーからのチーズ名を取得するためにReadLineメソッドを使用します:

string cheeseName = Console.ReadLine();
string cheeseName = Console.ReadLine();

リストの項目を検索しているとき、レイラは2:51で非常に重要なキーポイントを強調している。もしLINQを使わなかったら、ユーザー入力に一致する名前を見つけるために、コレクション内の各チーズを手作業でループしなければならない。 以下のコード・スニペットは、Layla(3:40)がLINQクエリ構文を使用するだけで、forループを使用せずにリスト要素を反復処理する方法を示しています:

if (cheeseList.Any(cheese => cheese.Name == cheeseName))
{
    Cheese cheese = cheeseList.FirstOrDefault(c => c.Name == cheeseName);

    Console.WriteLine($"{cheese.Name} cheese costs £{cheese.Price.ToString()} and has a strength of {cheese.Strength}.");
}
else
{
    Console.WriteLine("I'm sorry, we don't have that cheese.");
}
if (cheeseList.Any(cheese => cheese.Name == cheeseName))
{
    Cheese cheese = cheeseList.FirstOrDefault(c => c.Name == cheeseName);

    Console.WriteLine($"{cheese.Name} cheese costs £{cheese.Price.ToString()} and has a strength of {cheese.Strength}.");
}
else
{
    Console.WriteLine("I'm sorry, we don't have that cheese.");
}

上記のコードでは:

  • Laylaは、手動でリストをループする代わりに、LINQを使用することで、より効率的な検索ができると説明しています。 Anyメソッドは、リスト内のどのチーズもユーザーが入力した名前と一致するかどうかを確認します。

  • 一致が見つかった場合、要素が存在することを意味し、FirstOrDefaultメソッドが入力名に一致する最初のチーズを取得します。 このメソッドは、一致するものが見つからなければNULLを返すので安全であり、潜在的なエラーを防ぐことができます。

  • チーズが見つかれば、その名前、価格、強さが表示されます。 見つからない場合は、チーズが見つからないことを示すメッセージが表示されます。

このアプローチでは、C#でコレクションを検索するためにLINQを使用することの効率性とシンプルさを紹介します。 コードスニペットの出力は7:19に示されています。

Example Output

検索中の大文字と小文字の区別の処理

文字列を扱う際に、8:00にLaylaが、文字列は大文字小文字を区別することを思い出すことが重要だと指摘します。チーズ名の比較が大文字小文字を区別しないようにするために、ユーザーの入力とリスト内のチーズ名の両方を.ToLower()メソッドを使用して小文字に変換する必要があります。 これにより、ユーザーはどのようなタイプの大文字でも入力することができ、当社のコードはマッチするチーズを正しく検索します。 文字列の大文字と小文字の区別は厄介なので、適切に処理することが重要です。

実例:強さによるチーズのクエリー

(8:50)で、Laylaは、ユーザーがチーズをその強さでフィルタリングできる実用的な例を作成し、ユーザー入力とLINQクエリを組み合わせる方法を示します。

1.ユーザー入力プロンプトと読み取り1.

Console.WriteLine("What strength cheese are you interested in - choose between 1 and 5");
string strengthString = Console.ReadLine();
Console.WriteLine("What strength cheese are you interested in - choose between 1 and 5");
string strengthString = Console.ReadLine();

9:05にLaylaは、ユーザーに1から5の間の強度値を選ぶように依頼するところから始めます。それは、入力を求める単純なConsole.ReadLine()で彼らが入力したものを取得します。

2.入力を整数に変換する

bool isInt = int.TryParse(strengthString, out int strength);
bool isInt = int.TryParse(strengthString, out int strength);

次に、9:16で彼女は入力が実際の数字であることを確認している。 それにはint.TryParseを使うことを彼女は推奨します。 入力がチェックアウトされ、正常に整数に変換されれば、素晴らしいことです! そうでない場合は、潔く対応します。

3.強さによるチーズのフィルタリング

List<Cheese> cheeseByStrength = cheeseList.Where(c => c.Strength == strength).ToList();
List<Cheese> cheeseByStrength = cheeseList.Where(c => c.Strength == strength).ToList();

10:25のLaylaのビデオでは、楽しい部分が始まります。ここで、彼女はLINQを使用して我々のチーズリストをフィルタする方法、すなわちcheeseListを示します。 LINQの(c => c.Strength == strength)を使用して、ユーザーが選んだ強度と一致するチーズだけを抽出します。 これにより、新しいリストcheeseByStrengthが得られます。

4.フィルタリングされたチーズを出力する

foreach (var cheese in cheeseByStrength)
{
    Console.WriteLine($"Name: {cheese.Name} cheese");
}
foreach (var cheese in cheeseByStrength)
{
    Console.WriteLine($"Name: {cheese.Name} cheese");
}

最後に12:03に、仕上げにLaylaはConsole.WriteLineで指定した述部を使用してその名前を出力します。 シンプルで効果的!

12:17のプログラムの実行で、レイラは、ユーザーが強さの値を入力し、リストが指定された強さのチーズだけを表示するようにフィルタリングされる方法を示します。 出力例を以下に示します:(より良い画像が可能ですか?)

Example Output

結論

レイラのビデオは、C#のリストの概念と、LINQを使用してそれらをクエリする方法を効果的に紹介しています。 彼女の例と解説に従うことで、初心者はC#でリストを操作し、データを照会するための確かな基礎を得ることができます。 詳細とライブ・コーディング・セッションについては、レイラのYouTubeチャンネルをチェックして、彼女のライブ・ストリームに参加してください。

ListクラスのInsertメソッド、述部関数など、様々なメソッドとプロパティを探求し、リストを効果的に操作する理解と能力を高めてください。

Hero Worlddot related to C#を理解する リスト
Hero Affiliate related to C#を理解する リスト

好きなことを共有することで収入を増やす

.NET、C#、Java、Python、またはNode.jsを使用する開発者向けのコンテンツを作成しますか?あなたの専門知識を副収入に変えましょう!

アイアンサポートチーム

私たちは週5日、24時間オンラインで対応しています。
チャット
メール
電話してね