calculer le nombre de vrai (ou faux) des éléments dans un bool array?
Supposons que j'ai un tableau rempli avec des valeurs Booléennes, et je veux savoir combien d'éléments sont vrais.
private bool[] testArray = new bool[10] { true, false, true, true, false, true, true, true, false, false };
int CalculateValues(bool val)
{
return ???
}
CalculateValues doit retourner 6 si val est vrai, ou 4 si val est faux.
Solution évidente:
int CalculateValues(bool val)
{
int count = 0;
for(int i = 0; i<testArray.Length;i++)
{
if(testArray[i] == val)
count++;
}
return count;
}
Est-il une "élégante" solution?
OriginalL'auteur Evgeny | 2012-07-30
Vous devez vous connecter pour publier un commentaire.
Utiliser LINQ. Vous pouvez faire
testArray.Where(c => c).Count();
pour vrai comte ou de l'utilisationtestArray.Where(c => !c).Count();
pour faux vérifierOriginalL'auteur
OriginalL'auteur
Vous pouvez utiliser:
Cela gère la
true
etfalse
contrôles, basé sur votreval
paramètre.OriginalL'auteur
Essayer quelque chose comme cela :
OriginalL'auteur
Tout
testArray.Count(c => c)
est fonctionnellement correct, il n'est pas intuitif et il y a un risque que certains ultérieure développeur de dépouiller lec => c
partie de la pensée, il ne fait rien.Cela peut être derisked en déclarant la fonction lambda séparément avec un nom significatif:
OriginalL'auteur
J'aime ceci:
Sum
pour exécuter la fonction deCount
?Parce que c'est plus simple, plus concis et précis. Si vous aimez
Where()
/Count()
, vous obtenez les mêmes résultats, au détriment d'un autre appel de la méthode par l'élément de tableau.Je dirais
int trueCount = boolArray.Count(x => x)
est beaucoup plus concis et le pointSelon la documentation,
Count()
"Renvoie le nombre d'éléments dans une séquence." Qui vous donnera le comptage du nombre d'éléments dans le tableau ou dans leIEnumerable<T>
, indépendamment de l'élément valeur: vous avez besoin de filtrer la séquence avecWhere()
avant l'application deCount()
.Le
.Count()
méthode sur une collection de t, oui. Le.Count
méthode d'extension dans LINQ peut prendre un filtre: msdn.microsoft.com/en-us/library/bb534807(v=vs. 110).aspxOriginalL'auteur