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