2011-10-27 53 views
2

如何計算列表中每個數組中等於0的元素?我有一個列表List<byte[]> piks。 我想要計算每個byte[]有多少元素等於0列表中的每個數組中的元素<Array>

我嘗試了一些方法:

from c in piksle_lista_tablic[84] 
where (c.Equals(0)) 
select c 

piksle_lista_tablic[84].Count(n => n == 0) 

,我總是得到錯誤Expression cannot contain lambda expressions

例如: piks[1]是一個包含1156項的數組,我想知道該數組中有多少個特定元素。


PS:我可以在觀察窗口中使用Linq嗎?

回答

4

試試這個:

var zero_counts = piks.Select(p => p.Count(c => c == 0)); 

PS1。我可以嘗試在調試時使用linq嗎?

Visual Studio在監視窗口中不支持lambda表達式。

+0

隨着我的每一個我看到一個不同的答案:) –

+0

是,BYT怎麼樣調試?我可以寫這些代碼嗎?雖然粘貼,我不能寫超過'...p => p智力感知不給任何建議。我粘貼這樣的東西:'piksle_lista_tablic [84]。選擇(p => p。'且沒有提示。所以..我可以在調試模式下使用它嗎? – deadfish

+0

不支持,呃:(好吧,謝謝:PI雖然如果我在調試中寫入,它也可以用於非:X – deadfish

6
var results = from arr in piks 
       select arr.Where(b=>b==0).Count() 

該代碼將遍歷數組列表,併爲每個陣列找到等於零的元素,並返回一個IEnumerable與計數爲每個陣列。我喜歡比Count(選擇器)更多的地方,但這是一個品味的問題。我懷疑會有明顯的差異表現

給你ps 1是的,你可以在調試時使用linq,但它通常是一個痛苦,因爲linq語句是一個語句在方法中斬斷它有時可以幫助調試,但我不喜歡寫代碼爲了調試器。

編輯 根據您的評論:不可以在觀察窗口中使用Lambda。您可以使用LINQ在監視窗口,但僅作爲方法調用和僅與命名的功能

+0

這段代碼在調試時不起作用,我試過了..但是,謝謝,問題出在我的方法論中:) – deadfish

+0

@ Cooldown4seconds它將在調試中起作用您是在談論觀察窗口/即時窗口?如果那樣的話你是正確的,你不能在那裏使用lambda表達式 –

+0

是在觀看窗口 – deadfish

1

如果要算全球總,你可以這樣做:

piks.SelectMany(p => p).Count(p => p == 0); 

對於每個數組,你可以這樣做:

piks.Select(p => p.Count(p => p == 0)); 
+0

全球不是問題,我想爲每個陣列:)但也謝謝 – deadfish

1
List<byte[]> piks; 
// Fill piks... 
int zeroValuesCount = 0; 
foreach (var pik in piks) { 
    zeroValuesCount += pik.Count(x => x == 0); 
} 
相關問題