Maison >développement back-end >C++ >Comment obtenir le nombre d'éléments dans un IEnumerable sans itération ?

Comment obtenir le nombre d'éléments dans un IEnumerable sans itération ?

DDD
DDDoriginal
2024-12-28 08:40:12499parcourir

How to Get the Count of Items in an IEnumerable without Iteration?

Récupérer le nombre d'articles de IEnumerable sans itération

Considérez un scénario dans lequel vous avez un IEnumerable collection comme :

private IEnumerable<string> Tables
{
    get
    {
        yield return "Foo";
        yield return "Bar";
    }
}

Vous souhaitez parcourir cette collection et afficher la progression sous la forme "traitement #n sur #m". Existe-t-il un moyen de déterminer la valeur de m sans itérer avant l'itération principale ?

Comprendre IEnumerable

Par défaut, IEnumerable ne permet pas la récupération directe du nombre d'articles. Sa nature d'évaluation paresseuse signifie que les éléments ne sont récupérés qu'en cas de besoin. Ce choix de conception est fait pour optimiser l'utilisation des ressources en évitant l'allocation et le traitement inutiles de la mémoire.

Solution alternative : utiliser ICollection

Si vous avez besoin d'une connaissance immédiate du nombre d'éléments, une alternative à IEnumerable consiste à utiliser ICollection. Contrairement à IEnumerable, ICollection fournit une propriété Count qui renvoie le nombre d'éléments dans la collection.

public class TableCollection : ICollection<string>
{
    // Implementation details omitted for brevity

    public int Count => 2;
}

En convertissant votre collection Tables en ICollection ou en utilisant une collection générique comme List, vous pouvez accéder à la propriété Count pour récupérer le nombre d'éléments sans avoir besoin d'itération.

Conclusion

Alors que IEnumerable propose avantages de l'évaluation paresseuse, elle ne prend pas directement en charge la récupération du nombre d'éléments. Pour un accès immédiat au décompte, envisagez d'utiliser ICollection ou une structure de données plus appropriée qui fournit cette fonctionnalité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn