我们怎样才能在C#整数数组中找到项目数?

时间:2012-06-05 23:40:50

标签: c# arrays count integer

我需要在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);

6 个答案:

答案 0 :(得分:8)

嗯,首先你必须决定什么是无效值。是0吗?如果是这样,你可以这样做:

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

请注意,这只能起作用,因为默认情况下,int数组的元素初始化为零。如果0在你的情况下最终有效,你必须事先用不同的无效值填充数组。

另一种方法是使用可空类型:

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

int result = intArray.Count(i => i.HasValue);

答案 1 :(得分:3)

虽然它的me86为你提供good answer to your actual question,但我怀疑你最好不要重新考虑如何完全写这个。

如果这是你的目标,我建议不同地考虑这个问题。您可能需要考虑使用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

答案 2 :(得分: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.如果您要查找非零的数量数组中的元素,你应该按照其他一些答案的建议去做。

答案 3 :(得分:0)

初始化整数数组而不指定任何值时,C# assigns a value of zero to every element。因此,如果零不是您的数组的有效值,您可以始终测试它。

或者,您可以将数组的元素初始化为某个在上下文中无效的值(即,如果负数无效,则初始化为-1),然后循环遍历计算有效元素的数组。 / p>

答案 4 :(得分: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);

答案 5 :(得分:0)

如果不是初始化数组的人(即,您不能选择将数组值初始化为无效值-null,-1等),则上述解决方案都不是最佳选择。

假设您有一个数组:

var arr = new[] {0, 10, 18, 0, 20, 0, 0, 0, 0, 0, 0, 0};

如果您仅计算零项的数量:

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

Count()返回3,而实际上已经初始化了5个条目。一个示例是从音频文件读取到缓冲区的原始字节数组,您想知道最后读取的元素的索引。

并非完美但可以满足您需求的替代方法是寻找最后一个非零条目,如此处所述:Linq - Get the Index of the Last Non-Zero Number of Array