Frage: gegeben IEnumerable<>
, wie zu überprüfen, welche Sequenz enthält mehr als x
Artikel?Optimize LINQ Count()> X
MCVE:
static void Main(string[] args)
{
var test = Test().Where(o => o > 2 && o < 6); // ToList()
if (test.Count() > 1) // how to optimize this?
foreach (var t in test) // consumer
Console.WriteLine(t);
}
static IEnumerable<int> Test()
{
for (int i = 0; i < 10; i++)
yield return i;
}
Das Problem hier ist, was Count()
vollständige Sequenz ausgeführt wird, und das ist 1E6
+ Artikel (ToList()
ist auch keine gute Idee). Ich bin auch nicht berechtigt, den Verbrauchercode zu ändern (es ist eine Methode, die vollständige Abfolge akzeptiert).
Was ist 'Any' sein? – Pikoh
'Any()' sollte in Ordnung sein, sicher? 'Count()' zählt die gesamte Sammlung im Gegensatz zu 'Any' auf, die bestimmt, ob eine Sequenz irgendwelche Elemente enthält. – Ric
@Pikoh, mein Schlechter, 'Any()' hat Sequenz bis zum ersten Element ausgeführt, was mit 'Where()' Bedingungen übereinstimmt. Ja, 'Any()' gilt für den Fall, wenn 'x = 1' ist. – Sinatr