2016-09-15 7 views
-1

私は、各要素が整数のリストであるListを持っています。 LINQを開発して各リストの== 0になる整数の数を数えたいと思います。各外側のリスト内の選択された項目の数

だから、すべてゼロなので、私は、n個の整数のn個のリストが含まれているリストを作っ

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です。

私は今の問題は、リストがすべてで、それにはゼロを持っていないとき、それは、クエリを残していることがあるようです、と私は答えはゼロを得ることはありません

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」(すべてゼロのとき)です。リストにゼロがなければ、MINIMUMカウントがゼロの場合は答えがゼロになりません。

リストに含まれているリストの中で、ゼロの最小カウントを見つける方法はありますか? (最終的にゼロになります)。すべてのリストがグルーピングに入るようにする必要があります。次に、いくつのゼロがあるのか​​を数えますが、どうやってそれを行うのか分かりません。

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 = (from arr in prisoners select arr.Count(tally=>tally==0)).Min(); 
:クエリ式のよう

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

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; 
関連する問題