Tel elementen in elke array van een List <Array>

Hoe kan ik elementen tellen die gelijk zijn aan 0 in elke array van een lijst?

I have a list List piks. I would like to count in each byte[] how many elements are with equal to 0.

Ik heb een paar manieren geprobeerd:

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

of

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

and I always get the errofExpression cannot contain lambda expressions.

Fofexample: piks[1] is an array containing 1156 items, and I would like to know how many specific elements are in that array.


PS: Kan ik Linq gebruiken in het kijkvenster?

2

4 antwoord

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

die code zal de lijst van de array herhalen en voor elke array de elementen gelijk aan nul vinden en een IEnumerable met de tellingen voor elke array retourneren. Ik hou van de waar tel meer dan de graaf (selector) maar dat is een kwestie van smaak. Ik betwijfel of er een merkbaar verschil zal optreden

voor jou ps 1 ja je kunt linq gebruiken tijdens het debuggen, maar het is over het algemeen een pijn omdat een linq-statement één statement is. Het hakken ervan in methoden kan soms helpen tijdens het debuggen, maar ik vind het niet leuk om code te schrijven omwille van de debugger.

EDIT As per your comment: No you cannot use Lambda in the watch window. You can use Linq in the watch window but only as method calls and only with named functions

6
toegevoegd
Deze code en onder zullen niet werken in debug, ik heb het geprobeerd. Maar bedankt, het probleem zat in mijn methodologie :)
toegevoegd de auteur deadfish, de bron
ja in kijkvenster
toegevoegd de auteur deadfish, de bron
@ Cooldown4seconden het werkt bij foutopsporing heb je het over het bewakingsvenster/direct venster? als dat zo is, dan heb je gelijk, je kunt lambda-expressies daar niet gebruiken
toegevoegd de auteur Rune FS, de bron

Probeer dit:

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

PS1. kan ik proberen om linq te gebruiken tijdens het debuggen?

Visual Studio biedt geen ondersteuning voor lambda-expressies in het kijkvenster.

4
toegevoegd
Ja, maar hoe zit het met debuggen? Kan ik die code schrijven? Terwijl plakken dat ik niet verder kan schrijven dan ... p => p geeft intelisense geen enkele suggestie. Ik plak zoiets als: 'piksle_lista_tablic [84] .Selecteer (p => p.' En geen suggesion. Dus ... kan ik het gebruiken in de debug-modus in horloge?
toegevoegd de auteur deadfish, de bron
Geen ondersteuning, eh :( oke, bedankt: P hoewel ik schrijf in foutopsporing, het werkt ook in niet: X
toegevoegd de auteur deadfish, de bron
@ Cooldown4seconds: het venster van de quickwatch is sucks voor Linq, je kunt het niet gebruiken om Linq-query's te schrijven, behalve in zeer beperkte situaties. Niet zeker, maar het directe venster heeft hetzelfde probleem, hoewel je het zou kunnen proberen. Je kunt ook LinqPad proberen, hoewel het je Intellisense niet geeft tenzij je contant geld uitbetaalt.
toegevoegd de auteur Merlyn Morgan-Graham, de bron
Met mijn elke zie ik een ander antwoord :)
toegevoegd de auteur L.B, de bron
List piks;
// Fill piks...
int zeroValuesCount = 0;
foreach (var pik in piks) {
    zeroValuesCount += pik.Count(x => x == 0);
}
1
toegevoegd

Als u het totale totaal wilt tellen, kunt u dit doen:

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

Voor elke array kunt u dit doen:

piks.Select(p => p.Count(p => p == 0));
1
toegevoegd
global is geen probleem, ik wilde voor elk van arrays :) maar ook bedankt
toegevoegd de auteur deadfish, de bron