2016-09-15 40 views
-1

我有一個列表,其中每個元素是整數列表。我想開發LINQ來計算每個列表中==爲0的整數數目。每個外部列表中選定項目的數量

所以定義我的列表

var prisoners = new List<List<int>>(n); 
for (int c = 0; c < n; c++) 
{ 

    int[] l = new int[n]; 
    prisoners.Add(new List<int>()); 
    prisoners[c] = l.ToList<int>(); 

    } 

所以我做了一個包含整數n的n個列出一個清單,所有零 - 我所感興趣的是零的每個列表的數量,特別最小的那個數字,直到我在名單上工作,一開始就是n。

我想出了

var q = (from arr in prisoners from int tally in arr 
         where tally == 0 
         group arr by arr into grp select grp.Count()).Min(); 

現在的問題似乎是,當列表中有沒有零的話,那留下的查詢,我沒有得到答案爲零。起初,我確實得到了答案'n'(當它們都是零)時 - 一旦列表中沒有零點,我就不會得到最小零點數的答案爲零。

我如何找到列表中包含的任何列表中的最小零個數? (最終將爲零)。我需要讓所有的列表進入分組,然後我計算有多少零 - 但我不知道該怎麼做。

int n = 3; 
var prisoners = new List<List<int>>(n); 
for (int c = 0; c < n; c++) 
{ 

    int[] l = new int[n]; 
    prisoners.Add(new List<int>()); 
    prisoners[c] = l.ToList<int>(); 

} 

//return 3 below - that is correct at this point 
var q = (from arr in prisoners from int tally in arr where tally == 0 group arr by arr into grp select grp.Count()).Min(); 

prisoners[1] = (new int[] { 1, 1, 1 }).ToList(); 
prisoners[2] = (new int[] { 1, 1, 0 }).ToList(); 

//so now one of the arrays has zero zeroes in it, but I get the answer 1 - zero was wanted, that is to say 
//element 1 has a zero count of zero 

q = (from arr in prisoners from int tally in arr where tally == 0 group arr by arr into grp select grp.Count()).Min(); 
+0

你可以顯示一些示例輸入和預期輸出嗎? – Jamiec

+0

您的查詢按預期工作 - 它會退出,因爲您首先在「== 0」上對其進行過濾,然後進行計數。 – Jaya

+0

@JS_GodBlessAll - 我不是說查詢返回錯誤的結果,但它不是我想要的 - 我想計算每個數組中零的數量,然後返回最低的那些計數(可能爲零) – Cato

回答

3

你不需要組以下幾點:

var q = prisoners.Min(arr=>arr.Count(tally=>tally==0)); 

作爲查詢表達式:

var q = (from arr in prisoners select arr.Count(tally=>tally==0)).Min(); 
4

的問題是,你過濾掉內部列表,如果它沒有零點,因此你沒有得到0作爲正確最低。要解決此問題,您可以執行以下操作。

var q = prisoners.Min(row => row.Count(x => x == 0)); 

只要prisoners不爲空,這將工作。在這種情況下,它會拋出異常。如果您希望在這種情況下結果爲0,則可以執行以下操作。

var q = prisoners.DefaultIfEmpty().Min(row => row?.Count(x => x == 0)) ?? 0; 

或者,如果你沒有C#6

var q = prisoners.Any() ? prisoners.Min(row => row.Count(x => x == 0)) : 0; 
相關問題