Tôi đang thực hiện một số so sánh về vị trí lọc các mục khỏi danh sách. Tôi không chắc chắn làm điều đó trực tiếp mà sẽ là O (n), hoặc sử dụng .Where(). I made a simple example to test .Where()
trên một tập dữ liệu đơn giản. Có n = 100 mục, và khi tôi chạy trình gỡ rối trên dòng trong hàm BigO()
nó đi chính xác 100 lần khiến tôi nghĩ rằng .Where() cũng là O (n). Những gì tôi không thể tìm ra là nơi dữ liệu được lưu trữ trong quá trình hoạt động và tôi không chắc liệu điều đó có làm tăng thêm sự phức tạp nào không.Big O của linq. Ở đâu?
Tôi có thiếu gì đó hay không .Where() O (n)?
public class ListerFactory
{
public class Lister
{
bool includeItem { get; set; }
}
List<Lister> someList { get; set; }
public ListerFactory()
{
someList = new List<Lister>();
BuildLister();
}
public void BuildLister()
{
for(int i = 0; i < 100; i++)
{
var inc = new Lister();
inc.includeItem = i % 2;
someList.Add(inc);
}
BigO();
}
public void BigO()
{
someList = someList.Where(thisList => thisList.includeItem == true).ToList();
}
}
LINQ to _what_? Không phải là vấn đề ... – SLaks
xem John Skeets edulinq, rất nhiều thứ sẽ nhanh chóng trở nên rõ ràng về cách mọi thứ đang hoạt động. Trong thực tế, bạn sẽ nhanh chóng nhận ra hệ thống thực sự đơn giản như thế nào. https://msmvps.com/blogs/jon_skeet/archive/tags/Edulinq/default.aspx –
@SLaks - LINQ cho các đối tượng. Nó có xu hướng dễ đọc hơn viết ra toàn bộ vòng lặp foreach. –