2012-12-12 41 views
2

我有一个数组的数组,类似于arr[26,20],每个数组的第一个位置有一个字母表。计数非空矩阵元素的数量

因此,以矩阵形式布置它就像。

  • ABCDEFGHIJKLMNOPQRSTUVWXYZ
  • //////////////////////////
  • /////////// ///////////////
  • //////////////////////////
  • /// ///////////////////////

表示空值的正斜杠。

我想要获取单个colomn中的非null元素的数量。

所以,我可以正常阵列上使用的代码将

int number = arr[0].Count(s => s != null); 

但是,我怎么会为一个矩阵做类似描述?

回答

6

你可以使用Enumerable.Range()生成的行的索引:

int colIdx = 0; // column index to check 
int num = Enumerable.Range(0,arr.GetLength(0)).Count(i => arr[i,colIdx] != null); 

其中GetLength(dim)给出沿着维度dim(0 - 第一尺寸,1 - 第二尺寸等)的元素的数量。

+0

试图使用Enumerable,但也许我只是没有看到我做错了什么。这是我的确切代码。 NumOfElem = Enumerable(0,MArray.GetLength(0))。Count(x => MArray [x,count]!= null);' 我收到错误Enumerable是类似于变量。 。 – shadowjfaith

+0

使用'Enumerable.Range(...'不只是'可枚举(...';-) – digEmAll

+0

啊!我知道了,谢谢这是一个深夜 – shadowjfaith

1

,你可以简单地使用:

int columnIndex = 1;// column index to check 
arr.Count(s => s[columnIndex] != null); 
0

您可以使用

arr.Cast<YourArrayElementType>().Count(s => s != null); 

的原因是一个多维数组是一个非通用IEnumerable,可惜没IEnumerable<YourArrayElementType>

糟糕,这会计算整个矩阵中的非空元素,而不仅仅是一列/行。所以请使用digEmAll的答案。或者为什么不使用旧的for循环?