找到填充了多少位数的数组?

时间:2013-04-11 15:25:42

标签: c# arrays list count

假设我有字节数组

byte[] arr = new byte[16];

我只填写了16个字节中的10个

arr[0] = 1;
arr[1] = 1;
arr[2] = 2;
arr[3] = 3;
arr[4] = 4;
arr[5] = 5;
arr[6] = 6;
arr[7] = 7;
arr[8] = 8;
arr[9] = 9;
arr[10] = 1;

问题是用户最多可输入10位数字,最后一位数字可能为0

我怎样才能找到我的数组有多少位数,因为arr.Length和arr.Count()会给出16但我需要知道它是10?

3 个答案:

答案 0 :(得分:7)

我认为你最好使用通用List。然后,您可以使用Count属性来获取正确数量的项目。

List<byte> arr = new List<byte>();

arr.Add(1);
arr.Add(2);
arr.Add(3);
arr.Add(4);
arr.Add(5);

int count = arr.Count; // returns 5;
byte[] myArray = arr.ToArray(); // returns byte array

<强>更新

如果阵列是您唯一的选择而您无法切换到List<T>,那么您就不走运了。问题是,默认情况下,C#会将数组中的每个字节初始化为0。因此,只要编译器进入new byte[16];初始化,整个字节数组就会填充0。一旦发生这种情况,就无法知道0是默认值还是有效值。如果有一个0到255之间的数字,你100%知道将不会使用,你可以使用该数字初始化数组并得到每个元素的计数!=该数字。

您可以做的另一件事是您可以将数组初始化为一个字节(例如new byte[1]),并且每次需要更多元素时,resize the array都需要一个额外的字节。然后,您可以使用标准Length属性来查看填充的数量。

答案 1 :(得分:2)

如果"0"表示项目未填写(这意味着您无法使用0作为有效条目),那么您可以使用:

int numFilled = arr.Count(b => b != 0);

否则,您将不得不使用“魔术”号码(例如255)来表示“未使用”的项目。

无论哪种方式,它都不是万无一失的。如果没有理由使用固定长度数组,那么我建议使用不同的结构,例如List<byte>,可以动态填充转换到数组。

答案 2 :(得分:1)

int count = arr.Where(item => item != 0).Count();

或者

int count = arr.Count(item => item != 0);

[编辑]正如Jon Skeet上面所说,这假设您没有用0填充任何条目。