2012-12-12 61 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循環?