IRONSOFTWAREHOME

C#配列を理解する

C# 配列の理解: Layla Porter による C# 配列とループに関するビデオからの洞察

Layla Porter

21 分 53 秒

C#の配列は基本的なデータ構造で、開発者は同じ型の要素のコレクションを連続したメモリ位置に格納することができます。 配列には、一次元、多次元、ギザギザがあります。

C#の配列に関するこの記事は、レイラ・ポーターの教育用ビデオ"C# for Beginners Part 5 - Arrays and More Loops."にインスパイアされたものです。レイラのビデオでは、配列の基本を掘り下げ、C#のループテクニックを紹介し、視聴者にコレクションを管理し、データを効率的に反復処理するための必須スキルを身に付けさせます。

配列について

レイラはまず、C#における固定長のコレクションとしての配列について説明する。 配列のサイズが動的に変化する他のプログラミング言語とは異なり、C#の配列は一度作成されると不変です。 これは、メモリ割り当ての制約により、初期化後にサイズを変更できないことを意味します。

シンプルなコンソール操作:お気に入りのチーズを選ぶ

次のコードでは、配列とは対照的に、Layla (1:50)はまず、ユーザーが選択できる項目のリストを提示する方法を示します。

Console.WriteLine("Hello, what is your favourite cheese from this list?");
Console.WriteLine("1. Stilton");
Console.WriteLine("2. Cheddar");
Console.WriteLine("3. Pineapple");
Console.WriteLine("4. Brie");
var favouriteCheese = Console.ReadLine();
Console.WriteLine($"Here is a lump of {favouriteCheese} cheese!");

このコードはまず Console.WriteLine を使用して、ユーザーに好きなチーズを尋ねるメッセージをコンソールに表示します。 次に Console.WriteLine を4回使って、コンソールにチーズのリストを表示します。 その後、コードは Console.ReadLine を使用してコンソールからユーザーの入力を読み取り、変数 favouriteCheese に格納します。 最後に、コードは再び Console.WriteLine を使って、ユーザーの好きなチーズを含むメッセージをコンソールに表示します。

2:04から、レイラがこのコードを実行して、どのように動作するかを示しています:

配列を宣言する - 配列の初期化

説明するために、Laylaは文字列の配列を宣言して初期化する方法(この場合は、メニューとしてユーザーに最初に提示されたチーズのリスト)を示すことから始めます。 彼女は、一次元配列を定義する構文(2:30)と、中かっこを使って初期値を入れる構文(2:54)を紹介する。

string[] cheeses = { "Brie", "Cheddar", "Stilton", "Gouda" };

レイラは、配列におけるゼロベースのインデックスの重要性を強調します。レイラは次に、forループを使って配列を繰り返し処理する方法を説明する。このループ構造は、指定された条件に基づいてコードを繰り返し実行できるため、プログラミングにおいて極めて重要である。

ループの実装

ループの話に移り、Laylaは、イニシャライザ、条件、イテレータという3つの重要な要素を持つforループを紹介する。 このループは、配列の要素をその長さに基づいて繰り返し処理するために使用されます。

for (int i = 0; i < cheeses.Length; i++)
{
    Console.WriteLine(cheeses[i]);
}

彼女は4:44で、cheeses.Length が配列内の要素数を示し、ループが各要素を正確に反復することを強調します。 変数 i は、インデックスを反復処理するためのインデックス変数として機能します。 これにより、配列要素にアクセスせずに Console.WriteLine メソッドを複数回記述することなく、個々の配列要素が効果的に出力されます。 レイラは、6:17で、アプリケーションを実行し、このforループの出力が前の例とまったく同じであることを示す:

ソートと変更可能性

レイラは並べ替えの利点を説明し、7:17で Sort メソッドを使って配列をアルファベット順に並べ替えるデモを行い、実際に並べ替えはC#における配列の不変性のために裏で新しい配列を作成することを警告します。 これは、データ操作がメモリやパフォーマンスにどのように影響するかを理解する上で重要なポイントです。

Array.Sort(cheeses);

彼女はまた、配列内の個々の要素が、新しい配列を作成することなく直接変更できることを示し(8:10)、不変の中の可変性を説明している。 置換する要素のインデックスは、cheeses 配列変数の後に角括弧で渡されます:

cheeses[0] = "Roquefort";

これは、インデックス 0 の配列要素 "Brie" を新しい値 "Roquefort" に置き換えます。

チーズリストを更新する:新しいエントリーの処理 (8:46)

レイラは、既存のリストに値を追加する方法を説明します。これは、既存の値と新しい値を取得し、両方を含む新しい配列を作成し、この新しい配列を指すように参照を更新することを含みます。 次のコードは、その仕組みを示しています:

var favouriteCheese = Console.ReadLine();

bool containsFavourite = false;

foreach (var cheese in cheeses)
{
    if (favouriteCheese == cheese)
    {
        containsFavourite = true;
    }
}

if (!containsFavourite)
{
    cheeses = cheeses.Append(favouriteCheese).ToArray();
}

この例は、基本的な配列操作と、すでにリストにチーズがあるかを確認する foreach ループを使用して、単純な方法でプロセスを示しています。それがない場合、レイラは Append メソッドを使って System.Linq から配列に追加します(13:33)。

レイラは13:50で、cheesesAppend の結果が異なるタイプであるため、コードにエラーが出ると言います。Append はコレクション用のインターフェースである IEnumerable を返します。 これを修正するために、IEnumerableToArray() メソッドを使って配列に変換し、それを cheeses に再度割り当てます。 レイラは、黄色の波線がコンパイラの警告で favouriteCheese がnullである可能性などの潜在的な問題を示していると述べますが、このデモでは安全性チェックを無視します。

チーズリストの更新と印刷

レイラは、配列に新しい項目を追加したら、更新されたリストを画面に印刷する必要があると説明しています。 これを達成するために、for ループを使用します。配列に今では多くのアイテムが含まれていることを示すために、そのインデックスと共に各要素をプリントします。

Console.WriteLine("The new list:");

for (var i = 0; i < cheeses.Length; i++)
{
    Console.WriteLine(i + " " + cheeses[i]);
}

Console.WriteLine($"Here is a lump of {favouriteCheese} cheese!");

C#における配列の動的な性質を示し、新しい要素を追加し、配列の内容を表示して更新を確認する方法を示します。

そして、Laylaは新しく追加されたチーズを表示するためにアプリケーションを実行する(15:19):

オブジェクト配列で拡張する

理解を広げるために、レイラは Cheese クラスを作成し、NameStrength のプロパティを持たせ、オブジェクトの配列を導入します(16:14)。 その後、文字列リストを置き換えて Cheese オブジェクトの配列を作成し、反復処理中にオブジェクト内のプロパティにアクセスする方法をデモします(17:46)。

class Cheese
{
    public string Name { get; set; }
    public int Strength { get; set; }

    public Cheese(string name, int strength)
    {
        Name = name;
        Strength = strength;
    }
}

Cheese[] cheeses = new Cheese[]
{
    new Cheese("Stilton", 3),
    new Cheese("Cheddar", 2),
    new Cheese("Pineapple", 1),
    new Cheese("Brie", 2)
};

cheeses[0] = new Cheese("Roquefort", 4);

このセクションでは、配列がどのように複雑なデータ構造をカプセル化し、プログラミングに柔軟性とパワーを提供するかについて、基礎的な理解を提供します。

ループでチーズオブジェクトを使用する

Laylaは今、更新されたリストのすべての要素を画面に印刷する方法を示しています。 このシナリオでは、各チーズは NameStrength のプロパティを持つオブジェクトとして表現されます。 この for ループは、Cheese オブジェクトの配列を反復処理し、各反復で単一の配列要素を直接処理します。

for (int i = 0; i < cheeses.Length; i++)
{
    Console.WriteLine($"{cheeses[i].Name}, Strength: {cheeses[i].Strength}");
}

このループは、Cheese オブジェクトのプロパティへのアクセスを cheeses 配列内で簡素化します。 レイラは20:34にプログラムを実行し、出力は次のようになります:

結論

結論として、レイラ・ポーターC#における配列とループに関するチュートリアルは、初心者がこれらの重要な概念を理解するための強固な基礎を提供します。配列とさまざまなループ構造をマスターすることで、C# 開発者を目指す人は、プログラムの中でデータ構造を効果的に操作し、コレクションを反復処理できるようになります。 これらの基礎を理解することは、より複雑なアプリケーションを構築し、C#プログラミングのさらなる側面を探求する上で非常に重要です。

Laylaの例と解説に従うことで、初心者は自分のC#プロジェクトで配列とループを効果的に使用する自信を得ることができます。 C#のコレクションや高度な2次元配列、ギザギザ配列の詳細については、後続のチュートリアルや実践的な演習を参照することをお勧めします。

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日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。