C#の配列で要素を取得したり、要素数を取得する方法について書いています。
載せているコードについては、.Netのバージョン6(C#のバージョン10)で確認しました。
要素を取得するには?
要素番号を指定して取得する方法と、GetValueメソッドを使う方法があります。
要素番号を指定して取得する
配列の要素は、要素番号を指定して取得することができます。
例えば、下記のように指定して取ってきます。
var drinks = new string[3] {"water", "cola", "coffee"};
var drink = drinks[1];
Console.WriteLine(drink); // cola
要素数が3つのdrinks配列を作成しました。
その後に、drinks配列の要素の1番目を指定して、要素を取ってきています。
取得した要素をdrink変数に入れた後に出力しています。
配列は0番目から数えるので、結果取得した内容の「cola」が出力されました。
GetValueメソッドを使って取得する
GetValueメソッドを使って取得することもできます。
例えば、下記のように使うことができます。
var drinks = new string[3] {"water", "cola", "coffee"};
var drink = drinks.GetValue(2);
Console.WriteLine(drink); // coffee
要素数が3つのdrinks配列を作成しました。
その後に、drinks配列からGetValueメソッドを使って、要素を取ってきました。
2番目をdrink変数に入れた後に出力しました。
「coffee」が表示され、取得できているのが確認できました。
基本的には要素番号を指定する方が簡単なので、前述した方法で良いかと思います。
配列に存在しない要素番号を指定すると?
配列に存在しない要素番号を指定するとエラーになります。
var drinks = new string[3] {"water", "cola", "coffee"};
var drink = drinks[3];
Console.WriteLine(drink);
上記では、配列の3番目を指定していますが、配列は2番目までしか要素がありません。(0から数えます)
そのため、このようにSystem.IndexOutOfRangeException
エラーが発生します。
Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.
配列を使う際には、要素番号の指定時に配列の範囲外にならないか気をつけましょう。
要素数を取得するには?
配列のLengthプロパティにアクセスすると、要素数を取得することができます。
例えば、下記のように使います。
var drinks = new string[3] {"water", "cola", "coffee"};
Console.WriteLine(drinks.Length); // 3
要素数が3つのdrinks配列を作成しました。
その後に、drinks配列のLengthプロパティにアクセスして、配列の要素数を出力しています。
「3」が出力され、要素数が取れたことが確認できました。
取得される要素数は、配列が宣言されたときの要素数になります。
drinks配列に値が入っていなくても「3」になります。
多次元配列の要素数を取得する
多次元配列の要素数を取得する場合にもLengthプロパティを使うことができます。
多次元配列のn番目の要素数を取得する場合には、GetLengtメソッドが使えます。
例えば、下記のように使います。
var numbers = new int[3, 4] {
{1, 2, 3, 4},
{10, 20, 30, 40},
{40, 20, 22, 30}
};
Console.WriteLine(numbers.Length); // 12
Console.WriteLine(numbers.GetLength(1)); // 4
多次元なnumbers配列を作成しました。
numbers配列は、4つの要素が入った配列を3つ持っています。
numbers配列からLengthプロパティにアクセスすると、すべての要素数の「12」が取得できました。
numbers配列からGetLengthメソッドを呼んで、1番目を指定すると「4」が取得できました。
GetLengthメソッドはnumbers配列の指定した次元の要素数を取得できます。
var numbers = new int[3, 4, 6];
Console.WriteLine(numbers.GetLength(2)); // 6
コメント