0

こんにちは私は配列内の要素の数を見つけようとしていました

byte[] salt = new byte[32];

今はサイズ32についてのみ言及したので、ArrayのLengthプロパティとEnumerableのCountメソッドで32が得られます。

for、foreach、またはその他のループ構造を使用してこの配列ソルトを反復処理する場合でも、32回反復処理され、各インデックスの値は0(つまり、バイトのデフォルト値)です。

今、私が行うと仮定します:

for (int i = 0; i < 5 ; i++)
        {
            salt[i] = 4-i;
        }

そして、インデックス0から配列に順番に挿入される要素の数を知りたいのですが、ここでは、5回繰り返して、その数が5であることを知っていると言うかもしれませんが、ループやその他のロジックが多くあります(先頭に追加します)その中の別のバイト配列に)。*私の質問この番号5を私に与えることができる他の組み込み関数はありますか?*繰り返して最初のデフォルト値を確認し、そこでループを中断してカウントを取得しても、上記のように最後に挿入された値が0である可能性がありますsalt [4]は0であるため、繰り返しするとカウント4が正しくなくなります。 。私が間違っていなければ、32の連続するメモリバイトを超える32のようなサイズの配列が予約されており、0〜31の任意のインデックスに自由に挿入でき、要素の場所と方法と数を追跡する責任があると思います。アレイに割り当てられています。あなたが私のポイントを理解したことを願っていますそして助けてくれてありがとう。

4

3 に答える 3

4

配列は配列であり、.NETでは割り当て時に初期化されます。初期化されると、特定の値が初期化されていないのか、単に0であるのかという問題は、確認できるものではありません。0は0です。

ただし、いくつかの方法でそれをバイパスできます。List<int>@SLaksが提案するように、を使用して、必要な要素でのみ初期化される動的に割り当てられたリストを作成できます。

intの配列との配列の代わりにを使用することもできるint?ため、null値は0と同じではありません。

于 2013-02-10T17:24:19.987 に答える
3

簡単な答えはできません。配列には32個の整数が含まれ、.net Frameworkはそれらの一部が0であるかどうかを気にしないため、配列からの整数が0と異なる数をカウントする独自の関数を作成するか、保持することができます。配列要素などに値を割り当てるときの「カウント」。

または、リストなどの別のコンテナを使用して、整数を動的に追加または削除することもできます。

于 2013-02-10T17:21:39.300 に答える
2

さて、配列をint [] myArray =int[32];として定義すると あなたが言っている、私は32intを持っています。そうではなく、後で記入する32intのスペースを作成してください。カウントがあなたに32を与える理由です。

本当に追加してサイズを変更できるものが必要な場合は、リスト(またはその親戚の1つ)を使用する必要があります。

リストの「キャップ」が必要な場合は、これを見つけました:C#での最大容量の収集

于 2013-02-10T17:21:25.260 に答える