Heim >Backend-Entwicklung >C++ >Wie kann ich die Anzahl eines IEnumerable ermitteln, ohne es zu durchlaufen?

Wie kann ich die Anzahl eines IEnumerable ermitteln, ohne es zu durchlaufen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-27 10:29:17339Durchsuche

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

Aufzählen von IEnumerable ohne Iterieren: Ein Zähldilemma

Bei der Arbeit mit IEnumerable ist das Grundprinzip das der verzögerten Auswertung, bei der Elemente nur bei Bedarf abgerufen werden. Manchmal befinden wir uns jedoch möglicherweise in einer Situation, in der wir die Anzahl der Elemente in der Sammlung kennen müssen, ohne sie zu durchlaufen.

Bedenken Sie den folgenden Codeausschnitt:

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

Wenn wir Ich möchte diese Sammlung durchlaufen und den Fortschritt als „Verarbeitung von #n von #m“ anzeigen. Wie können wir den Wert von m ohne bestimmen? iterieren?

Einschränkungen von IEnumerable

Leider ist dies mit IEnumerable nicht möglich. Es arbeitet konstruktionsbedingt träge und gibt Elemente nur dann zurück, wenn sie angefordert werden. Die vorherige Bestimmung der Gesamtzahl würde eine vorherige Durchquerung erfordern und den Zweck der verzögerten Auswertung zunichte machen.

ICollection to the Rescue

Wenn es wichtig ist, die Anzahl ohne Iteration zu kennen, denken Sie darüber nach Verwenden Sie stattdessen ICollection. ICollection ist eine Schnittstelle, die Sammlungen darstellt, die Informationen über deren Inhalt bereitstellen können. Es enthält eine Count-Eigenschaft, die die Anzahl der Elemente in der Sammlung zurückgibt.

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

int count = Tables.Count;

Durch die Umwandlung von Tabellen in List können wir auf die Count-Eigenschaft zugreifen und die Anzahl ohne Iteration ermitteln.

Zusammenfassend lässt sich sagen, dass IEnumerable zwar durch seine Effizienz bei der verzögerten Auswertung glänzt, das Fehlen von Zählinformationen im Voraus jedoch eine Einschränkung darstellen kann. Für Szenarien, in denen es unbedingt erforderlich ist, die Anzahl im Voraus zu kennen, sollten Sie stattdessen die Verwendung von ICollection in Betracht ziehen.

Das obige ist der detaillierte Inhalt vonWie kann ich die Anzahl eines IEnumerable ermitteln, ohne es zu durchlaufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn