Câu hỏi: được đưa ra IEnumerable<>
, cách kiểm tra xem chuỗi nào chứa nhiều hơn x
mục?Tối ưu hóa LINQ Đếm()> 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;
}
Vấn đề ở đây là gì Count()
sẽ chạy chuỗi đầy đủ và đó là 1E6
+ mục (ToList()
cũng là ý tưởng tồi). Tôi cũng không được phép thay đổi mã người tiêu dùng (đó là một phương thức chấp nhận chuỗi hoàn chỉnh).
gì về 'Any'? – Pikoh
'Any()' chắc chắn sẽ ổn chứ? 'Count()' liệt kê toàn bộ bộ sưu tập không giống 'Any' xác định xem một chuỗi có chứa bất kỳ phần tử nào không. – Ric
@Pikoh, bad của tôi, 'Any()' đang chạy chuỗi cho đến khi mục đầu tiên sẽ phù hợp với điều kiện 'Where()'. Có, 'Any()' sẽ làm cho trường hợp khi 'x = 1'. – Sinatr