Pytanie: biorąc pod uwagę IEnumerable<>
, jak sprawdzić, która sekwencja zawiera więcej niż x
elementów?Optymalizacja liczby LINQ()> 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;
}
Tutaj problemem jest to, co Count()
będzie działał pełną sekwencję i to 1E6
+ elementy (ToList()
jest również zły pomysł). Nie mogę też zmienić kodu konsumenta (jest to metoda akceptująca kompletną sekwencję).
Co o 'Any'? – Pikoh
'Any()' powinno być dobrze na pewno? 'Count()' wylicza całą kolekcję w przeciwieństwie do 'Any', która określa, czy sekwencja zawiera jakiekolwiek elementy. – Ric
@Pikoh, moje złe, 'Any()' działało sekwencyjnie aż do pierwszego elementu, który będzie pasował do warunków 'Where()'. Tak, 'Any()' zrobi dla przypadku gdy 'x = 1'. – Sinatr