C#で配列の指定した次元の要素総数を取得する方法(GetLongLength活用ガイド)
C#では、GetLongLength()メソッドを使用することで、配列の指定した次元に含まれる要素の総数を取得できます。このメソッドは、0から始まる次元のインデックスを引数に受け取り、該当する次元の要素数を64ビット整数(long型)として返します。
GetLongLength()メソッドとは
Array.GetLongLength(int dimension)は、指定された次元の要素数をlong型で返すメソッドです。要素数がint型の上限(約21億)を超えるような巨大な配列を扱う場合に特に有用です。通常の配列であれば、LengthプロパティやGetLength()メソッドでも同じ値を取得できます。
例1:1次元配列の場合
まず、文字列の1次元配列に対して、配列の状態を表す各種プロパティと要素数を確認してみましょう。
using System;
public class Demo {
public static void Main() {
string[] products = new string[] { "Andy", "Mark", "Gary", "Andre" };
Console.WriteLine("'A'で始まる名前は存在するか? = {0}",
Array.Exists(products, ele => ele.StartsWith("A")));
Console.WriteLine("配列は固定サイズか? = " + products.IsFixedSize);
Console.WriteLine("配列は読み取り専用か? = " + products.IsReadOnly);
Console.WriteLine("配列は同期されているか? = " + products.IsSynchronized);
Console.WriteLine("最初の要素のインデックス = " + products.GetLowerBound(0));
Console.WriteLine("最後の要素のインデックス = " + products.GetUpperBound(0));
Console.WriteLine("GetLongLength(0) = " + products.GetLongLength(0));
}
}実行結果
上記のコードを実行すると、次のような出力が得られます。
'A'で始まる名前は存在するか? = True 配列は固定サイズか? = True 配列は読み取り専用か? = False 配列は同期されているか? = False 最初の要素のインデックス = 0 最後の要素のインデックス = 3 GetLongLength(0) = 4
この結果から、配列の最初の要素のインデックスが0、最後の要素のインデックスが3であることがわかります。そしてGetLongLength(0)の戻り値は4となっており、次元0(1次元目)に4つの要素が格納されていることを示しています。
例2:多次元(3次元)配列の場合
続いて、3次元の文字列配列に対して同じ操作を行う例を見てみましょう。多次元配列では、次元番号を変えることで各次元ごとの要素数を個別に取得できます。
using System;
public class Demo {
public static void Main() {
string[,] stdNames = new string[,] {
{ { "John", "Gary" },
{ "Jacob", "Harry" } },
{ { "Kevin", "Ryan" },
{ "David", "Mark" } }};
Console.WriteLine("配列は固定サイズか? = " + stdNames.IsFixedSize);
Console.WriteLine("配列は読み取り専用か? = " + stdNames.IsReadOnly);
Console.WriteLine("配列は同期されているか? = " + stdNames.IsSynchronized);
Console.WriteLine("最初の要素のインデックス = " + stdNames.GetLowerBound(0));
Console.WriteLine("最後の要素のインデックス = " + stdNames.GetUpperBound(0));
Console.WriteLine("GetLongLength(0) = " + stdNames.GetLongLength(0));
Console.WriteLine("GetLongLength(1) = " + stdNames.GetLongLength(1));
}
}実行結果
上記のコードを実行すると、次のような出力が得られます。
配列は固定サイズか? = True 配列は読み取り専用か? = False 配列は同期されているか? = False 最初の要素のインデックス = 0 最後の要素のインデックス = 1 GetLongLength(0) = 2 GetLongLength(1) = 2
3次元配列の場合も同様に、引数に渡す次元番号を変更すれば、それぞれの次元に含まれる要素数を確認できます。この例では、次元0にも次元1にもそれぞれ2つの要素が含まれていることが確認できます。
まとめ
GetLongLength()メソッドは、指定した次元の要素数をlong型で返します。- 引数には対象となる次元を0から始まるインデックスで指定します。
GetLowerBound()で最初のインデックス、GetUpperBound()で最後のインデックスを取得でき、両者を組み合わせると配列の構造を把握しやすくなります。- 多次元配列でも、次元番号を変えて呼び出すことで各次元のサイズを個別に調べられます。
-
C#で配列内に指定した条件に一致する要素が含まれているか確認する方法
C#で配列の中に、特定の条件に一致する要素が1つでも存在するかどうかを確認したい場合があります。そんなときに便利なのが Array.Exists() メソッドです。このメソッドは、第1引数に検索対象の配列、第2引数に条件を表す述語(Predicate)デリゲートを渡します。たとえば文字列の前方一致を調べたい場合は、StartsWith() メソッドと組み合わせることで簡単に実現できます。以下では、具体的なサンプルコードとその実行結果を通じて、使い方を詳しく見ていきましょう。サンプルコード:StartsWith()で前方一致を判定するusing System; public class Demo
-
C#で配列の先頭の要素をスキップする方法:Skip()メソッドの使い方
配列の先頭から指定した数の要素をスキップしたい場合には、C#のLINQに用意されているSkip()メソッドを使用します。このメソッドは、指定した個数の要素を読み飛ばし、残りの要素をシーケンス(IEnumerable<T>)として返します。Skip()メソッドはSystem.Linq名前空間に含まれているため、使用する際はusing System.Linq;を忘れずに記述してください。 サンプル配列 たとえば、次のような整数型の配列があるとします。 int[] arr = { 24, 40, 55, 62, 70, 82, 89, 93, 98 }; 先頭の4つの要素をスキップする