Heim >Backend-Entwicklung >C++ >Wie kann ich die Anzahl eines IEnumerable ermitteln, ohne es zu durchlaufen?
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
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!