Maison >développement back-end >C++ >Comment puis-je obtenir le nombre d'un IEnumerable sans le parcourir ?

Comment puis-je obtenir le nombre d'un IEnumerable sans le parcourir ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-27 10:29:17288parcourir

How Can I Get the Count of an IEnumerable Without Iterating Through It?

Énumérer IEnumerable sans itération : un dilemme de comptage

Lorsque vous travaillez avec IEnumerable, le principe fondamental est celui de l'évaluation paresseuse, où les éléments ne sont récupérés qu'au fur et à mesure des besoins. Cependant, nous pouvons parfois nous retrouver dans une situation où nous avons besoin de connaître le nombre d'éléments de la collection sans les parcourir.

Considérez l'extrait de code suivant :

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

Si nous souhaitez parcourir cette collection et afficher la progression sous la forme "traitement #n de #m", comment pouvons-nous déterminer la valeur de m sans itérer ?

Limitations de IEnumerable

Malheureusement, cela n'est pas possible avec IEnumerable. De par sa conception, il fonctionne paresseusement, ne produisant des éléments que sur demande. Déterminer le décompte total à l'avance nécessiterait un parcours initial, ce qui irait à l'encontre de l'objectif d'une évaluation paresseuse.

ICollection à la rescousse

S'il est crucial de connaître le décompte sans itération, considérez en utilisant ICollection à la place. ICollection est une interface qui représente des collections pouvant fournir des informations sur leur contenu. Il comprend une propriété Count qui renvoie le nombre d'éléments dans la collection.

private ICollection<string> Tables
{
    get
    {
        return new List<string> { "Foo", "Bar" };
    }
}

int count = Tables.Count;

En convertissant Tables en List, nous pouvons accéder à la propriété Count et obtenir le nombre sans itérer.

En conclusion, même si IEnumerable brille par son efficacité dans l'évaluation paresseuse, son manque d'informations de décompte à l'avance peut être une limitation. Pour les scénarios où il est impératif de connaître le décompte à l’avance, envisagez plutôt d’utiliser ICollection.

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