IRONSOFTWAREHOME

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),
};

上記の例では、Laylaがコレクション初期化子構文を使用してCheeseオブジェクトでリストを定義および設定します。 彼女は、C#でリストの作成と初期化を実演しながら、Cheeseクラスに対応する各チーズオブジェクトのID、名前、価格、強度などのプロパティを指定します。

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

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

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

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

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

2:45からのビデオでは、Layla PorterがLINQを使って、ユーザー入力に基づいて特定のチーズを検索する方法を実演しています。 彼女はユーザーからチーズの名前を取得するために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.");
}

上記のコードでは:

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

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

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

このアプローチでは、C#でコレクションを検索するためにLINQを使用することの効率性とシンプルさを紹介します。 コードスニペットの出力は7:19に示されています:(以下より良い画像が可能ですか?)

サンプル出力

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

文字列を扱う際に、Laylaは8:00に、これらが大文字小文字を区別することを思い出すことが重要だと指摘します。チーズの名前の比較を大文字小文字を区別しないようにするために、.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();

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

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

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

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

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

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

10:25にあるLaylaのビデオでは、ここでチーズのリストcheeseListをLINQを使用してフィルタリングする方法を示します。 LINQの(c => c.Strength == strength)を使用して、ユーザーが選んだ強度に一致するチーズだけを引き出します。 これにより、新しいリストcheeseByStrengthが得られます。

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

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

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

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

出力例

結論

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

ListクラスのInsertメソッド、述語関数などのさまざまなメソッドとプロパティを調べて、リストを効果的に操作するための理解と能力を高めることを忘れないでください。

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

OR
bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。