C#の配列サイズ(長さ)


97

C#で配列のサイズ(長さ/アイテム数)を決定するにはどうすればよいですか?


1
@Marcelo:...しかし、「私の眼鏡はどこですか」などの簡単な質問には答えられません。;)
Guffa

2
「サイズ」とはどういう意味ですか?要素の数またはバイト単位のサイズ?
FredrikMörk10年

2
@fearofawhackplanet私が賛成したのは、多次元配列ではLengthが機能しないという同じ問題があり、この質問の結果として、RankとGetLength(index)が検出されたためです。
TheMathemagician 2015

1
@fearofawhackplanet 145,000のビューがあるという事実は、その妥当性の証です。賛成。
brycejl

回答:


152

1次元配列のa場合、

a.Length

の要素の数を示しaます。

場合にはb(例えば、矩形の多次元配列ですint[,] b = new int[3, 5];

b.Rank

次元数(2)と

b.GetLength(dimensionIndex)

与えられた次元の長さを取得します(次元の0ベースのインデックス付けb.GetLength(0)-3とb.GetLength(1)5です)。

詳細については、System.Arrayのドキュメントを参照してください。

@Luceroがコメントで指摘しているように、「ギザギザの配列」という概念があります。これは、実際には(通常は1次元の)配列の1次元配列にすぎません。

たとえば、次のようになります。

int[][] c = new int[3][];
c[0] = new int[] {1, 2, 3};
c[1] = new int[] {3, 14};
c[2] = new int[] {1, 1, 2, 3, 5, 8, 13};

cすべての3つのメンバーの長さが異なることに注意してください。この場合、前述のようにc.Lengthの要素数を示しますc(3)、およびc[0].Lengthc[1].Length、およびc[2].Lengthそれぞれ3,2、及び7、あろう。


1
完全を期すために、ギザギザの配列がどのように機能するかをリストすることもできます(例int[][]);-)
Lucero

私はそれを検討しましたが、@ Lucerno、それは別の問題であると考えました- 配列の物事のサイズを把握する-ギザギザの配列は、たまたま一次元の配列を含む一次元の配列です。 。
ブレアコンラッド

3
もちろん、私はあなたが正しいことを知っています。そのため、私は自分で答えを書くのではなく、笑顔でコメントを追加しました。しかし、間の違い[,]とは、[][]それはまだ価値がそれは注目にすることができるので、すべての.NET初心者のための明確ではないようで[][]、あなたの答えの意味での多次元配列ではありません。
Luceroは

2
いい答えだ。ただし、変更したい場合がb.GetLength[0] is 3 and b.GetLength[1] is 5ありますb.GetLength(0) and b.GetLength(1)
Droogans 2012年

29

あなたは配列ドキュメントを見ることができますこの質問に対する答えを見つける。

この特定のケースでは、おそらくLengthが必要です。

int sizeOfArray = array.Length;

しかし、これは非常に基本的な質問であり、間違いなくこのような多くの質問があるので、答えを伝えるだけでなく、自分で答えを見つける方法を教えたいと思います。

Visual Studio Intellisense

変数の名前を入力して.キーを押すと、そのオブジェクトで使用できるすべてのメソッド、プロパティ、イベントなどのリストが表示されます。メンバーを強調表示すると、メンバーの機能の簡単な説明が表示されます。

F1を押す

目的の動作をする可能性のあるメソッドまたはプロパティを見つけたが確信がない場合は、カーソルをその上に移動してF1キーを押すと、ヘルプが表示されます。ここでは、より詳細な説明と関連情報へのリンクを取得します。

探す

検索用語 size of array in C#は、質問への回答などを示す多くのリンクがあります。プログラマーが習得しなければならない最も重要なスキルの1つは、情報を見つける方法です。特に同じ質問が以前に行われたことがある場合は特に、自分で答えを見つける方が速いことがよくあります。

チュートリアルを使用する

C#の学習を始めたばかりの場合は、チュートリアルに従う方が簡単です。MSDNのC#チュートリアルをお勧めします。本が必要な場合は、Essential C#をお勧めします。

スタックオーバーフロー

自分で答えを見つけることができない場合は、Stack Overflowに質問を投稿してください。ただし、まず自分で答えを見つけるために努力したことを示していただければ幸いです。


3
よくできました、マーク、でもやりすぎかもしれません!
Nayan

1
@Nayan:ありがとう!OPが他のポスターからすばやく回答を得られたことは素晴らしいことですが、特定の質問に対する回答を教えるよりも、初心者に情報を見つける方法を教えることが重要だと感じています。OPがこの答えが役に立つことを望み、それが彼らが答えを見つけることができたであろう何百もの質問をする手間を省くことができることを願っています。
マーク・バイアーズ

12
時間をかけてこのアプローチを取るための+1-「人に魚を与える...」など
ピーターケリー

私が同じことをする必要がある場合は、ここでOPをあなたの答えにリダイレクトします=)そして、はい、私は完全にあなたに同意します!
Nayan

1
これは良いですが、どういうわけか自動的にリンクされるべきだと思います。彼らは「見る価値のある回答」ページを開始できませんか?私が追加したいのは、質問を投稿する前にスタックオーバーフロー自体を確認する必要があることです。多くの場合、私は質問の投稿を開始してから、関連する質問がポップアップ表示されます。答えがここにも属していない場合、答えがインターネット上の他の場所にあるかどうかはわかりません。
user420667

16

1次元配列の場合

int[] listItems = new int[] {2,4,8};
int length = listItems.Length;

多次元配列の場合

int length = listItems.Rank;

1次元のサイズを取得するには

int length =  listItems.GetLength(0);

2
Rankプロパティは、項目の数を返しません、それは次元の数を返します。
Guffa

1次元配列でサポートされているプロパティのドキュメントはどこにありますか?(すなわち、LengthRankGetLength
ミン・トラン


8

Lengthプロパティ。

int[] foo = new int[10];
int n = foo.Length; // n == 10

5

1次元配列の場合は、次のLengthプロパティを使用します。

int size = theArray.Length;

多次元配列の場合、Lengthプロパティは配列内のアイテムの総数を返します。このGetLengthメソッドを使用して、いずれかの次元のサイズを取得できます。

int size0 = theArray.GetLength(0);

3

一般的なケースのほとんどでは、「長さ」と「カウント」が使用されます。

アレイ:

int[] myArray = new int[size];
int noOfElements = myArray.Length;

型付きリスト配列:

List <int> myArray = new List<int>();
int noOfElements = myArray.Count;

1

それはこのようになります:1D:

 type[] name=new type[size]  //or =new type[]{.....elements...}

2D:

 type[][]name=new type[size][] //second brackets are emtpy

次に、この配列を使用すると:

 name[i]=new type[size_of_sec.Dim]

または、行列のようなものを宣言することができます

type[ , ] name=new type [size1,size2]

0

これまで見逃されてきたことは、私が突然イライラしたことです。

配列内のアイテムの量を知るにはどうすればよいですか?ある.Length等しいです.Countリストの?

答えは:new X[number] あなたと一緒に作成されたタイプXの配列に入れられたタイプXのアイテムの量はあなた自身を運ぶ必要があります

例えば。カウンターを使用する:int countItemsInArray = 0countItemsInArray++、あなたの配列へのすべての割り当てのために。

(で作成した配列には、タイプXの項目(参照)のnew X[number]すべてのスペースがnumberすでに割り当てられています。たとえば、最初の割り当てとして内部の任意の場所に割り当てることができます(たとえば、number= 100および変数名= aa[50] = new X();

C#が作成時に配列内の各場所の初期値を指定しているかどうかはわかりません。そうでない場合、または比較できない初期値である場合(自分で配列に入力した値である可能性があるため)、から順番に割り当てない場合は、配列内のすでに割り当てられている場所も追跡する必要があります0(この場合、すべての場所がcountItemsInArray割り当てられる)。

質問の配列のサイズ(長さ/アイテム数)は、/が「代替」または「除算」を意味するかどうかに応じて、後者をカバーする必要があります(「アイテム数」は、「上記の私のコードの.Length値に対応するアイテムの量」および他の人が与えたnumber):

C#にはsizeof演算子があります(https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/sizeof)。組み込み型(intなど)に使用しても安全です((変数ではなく)型でのみ機能します)。したがって、バイトbの型の配列のサイズはにintなりますb.Length * sizeof(int)

(前述のように、作成時に既に割り当てられている配列のすべてのスペースが原因で、sizeof型でのみ機能するsizeof(variable)/sizeof(type)ため、機能せず、追跡せずにアイテムの量を生成するようなコードはありません。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.