7

タイプが整数であるC#配列でアイテム数を見つける必要があります。

私が言いたいのは;

int[] intArray=new int[10]
int[0]=34
int[1]=65
int[2]=98

intArrayのアイテム数は3です。

以下のstrArrayのコードを見つけましたが、int配列では機能しません。

string[] strArray = new string[50];
...
int result = strArray.Count(s => s != null);
4

6 に答える 6

8

さて、最初にあなたは無効な値が何であるかを決定する必要があります。0ですか?もしそうなら、あなたはこれを行うことができます:

int result = intArray.Count(i => i != 0);

これが機能するのは、デフォルトでは、int配列の要素がゼロに初期化されるためだけであることに注意してください。状況で0が有効になる場合は、事前に別の無効な値を配列に入力する必要があります。

もう1つの方法は、null許容型を使用することです。

int?[] intArray = new int?[10];
intArray[0] = 34;
intArray[1] = 65;
intArray[2] = 98;

int result = intArray.Count(i => i.HasValue);
于 2012-06-05T23:44:12.663 に答える
3

itsme86 は実際の質問に対する適切な回答を提供しましたが、これを完全に記述する方法を再考した方がよいのではないかと思います。

これがあなたの目標である場合は、これについて別の方法で考えることをお勧めします。固定サイズの配列を割り当て、それに特定の値のみを割り当てる代わりに、次の使用を検討することをお勧めしますList<int>

List<int> intList = new List<int>();

intList.Add(34);
intList.Add(65);
intList.Add(98);

リストは必要に応じて自動的に大きくなるため、アイテムの数は常に でありintList.Count、「割り当てられたサイズ」を気にすることなく、この方法で好きなだけアイテムを追加できます。0リストに実際の値として追加しても、悪い結果は得られません。有効な値の場合、ゼロ以外の要素をカウントしてもゼロはカウントされません。

配列の場合と同じように、インデックスでアイテムにアクセスすることもできることに注意してください。

int secondValue = intList[1]; // Access like you do with arrays
于 2012-06-05T23:58:44.053 に答える
1
int[] intArray=new int[3]  // Edit: Changed this to 3 to make my answer work. :)
int[0]=34
int[1]=65
int[2]=98

int count = intArray.Length; // <-- Is this what you're after?

編集:

へん。謙虚に私に指摘されたようLengthに、配列内の要素の総数を返します。これは、例では 10 でした。配列内のゼロ以外の要素の数を探している場合は、提案どおりに実行する必要があります。他のいくつかの答えで。

于 2012-06-05T23:45:02.433 に答える
0

配列が順番にのみアクセスされることが保証されている場合は、少し分割して征服することで、完全な反復 IEnumerable Count (より大きな配列の場合) を打ち負かすことができます。

static int DivideCount(int[] arr, int idx, int bottom, int top)
{
    if (idx <= 0)
        return 0;
    else if (idx >= arr.Length - 1)
        return arr.Length;
    else if (arr[idx] == 0 && arr[idx - 1] != 0)
        return idx;
    else if (arr[idx] == 0 && arr[idx - 1] == 0)
        return DivideCount(arr, bottom + ((idx - bottom) / 2), bottom, idx);
    else if (arr[idx] != 0 && arr[idx - 1] != 0)
        return DivideCount(arr, top - ((top - idx) / 2), idx, top);
    else
        return -1;  // hello compiler
}



int[] intArray = new int[10];
intArray[0] = 35;
intArray[1] = 65;
intArray[2] = 98;

var count = DivideCount(intArray, intArray.Length / 2, 0, intArray.Length);
于 2012-06-06T02:05:18.320 に答える
0

値を指定せずに整数配列を初期化すると、C# はすべての要素にゼロの値を割り当てます。したがって、ゼロが配列の有効な値でない場合は、いつでもテストできます。

または、配列の要素をコンテキストで無効な値に初期化し (つまり、負の数が無効な場合は -1 に初期化)、有効な要素をカウントする配列をループ処理することもできます。

于 2012-06-05T23:52:20.467 に答える