FIRSTORDEFAULT LÀ GÌ

     

Có một hiệu quả thú vị khi tìm tìm Diana trong một chuỗi khủng kiểu tham chiếu đơn giản dễ dàng có trực thuộc tính chuỗi đơn.

Bạn đang xem: Firstordefault là gì

Bạn vẫn xem: Firstordefault là gì

using System;using System.Collections.Generic;using System.Linq;public class Customer public string Name get;set;Stopwatch watch = new Stopwatch(); const string diana = "Diana"; while (Console.ReadKey().Key != ConsoleKey.Escape) //Armour with 1000k++ customers. Wow, should be a product with a great success! :) var customers = (from i in Enumerable.Range(0, 1000000) select new Customer Name = Guid.NewGuid().ToString() ).ToList(); customers.Insert(999000, new Customer Name = diana ); // Putting Diana at the over :) //1. System.Linq.Enumerable.DefaultOrFirst() watch.Restart(); customers.FirstOrDefault(c => c.Name == diana); watch.Stop(); Console.WriteLine("Diana was found in 0 ms with System.Linq.Enumerable.FirstOrDefault().", watch.ElapsedMilliseconds); //2. System.Collections.Generic.List.Find() watch.Restart(); customers.Find(c => c.Name == diana); watch.Stop(); Console.WriteLine("Diana was found in 0 ms with System.Collections.Generic.List.Find().", watch.ElapsedMilliseconds);

*

Đây có phải là do không có Trình tinh chỉnh trong List.Find () hoặc vấn đề này cộng với hoàn toàn có thể là sản phẩm công nghệ gì không giống không?

Find() chạy cấp tốc hơn ngay gần gấp đôi, hi vọng . đội Net vẫn không đánh dấu nó lỗi thời trong tương lai.

c#.netperformancelinqTôi đã hoàn toàn có thể bắt chước công dụng của bạn vì vậy tôi đang dịch ngược chương trình của khách hàng và bao gồm một sự biệt lập giữa Find với FirstOrDefault.

Đầu tiên ở đó là chương trình dịch ngược. Tôi đã làm cho đối tượng người sử dụng dữ liệu của khách hàng trở thành một mục dữ liệu không đồng nhất chỉ để biên dịch

List> source = Enumerable.ToList(Enumerable.Select(Enumerable.Range(0, 1000000), i => var local_0 = new Name = Guid.NewGuid().ToString() ; return local_0; )); source.Insert(999000, new Name = diana ); stopwatch.Restart(); Enumerable.FirstOrDefault(source, c => c.Name == diana); stopwatch.Stop(); Console.WriteLine("Diana was found in 0 ms with System.Linq.Enumerable.FirstOrDefault().", (object) stopwatch.ElapsedMilliseconds); stopwatch.Restart(); source.Find(c => c.Name == diana); stopwatch.Stop(); Console.WriteLine("Diana was found in 0 ms with System.Collections.Generic.List.Find().", (object) stopwatch.ElapsedMilliseconds);Điều quan trọng đặc biệt cần để ý ở đó là FirstOrDefault được điện thoại tư vấn trên Enumerable trong lúc Find được gọi là một trong phương thức trong list nguồn.

Xem thêm: Grammarly Là Gì - Grammarly Premium Là Gì

Vì vậy, search thấy đang làm cho gì? Đây là cách tiến hành Find dịch ngược

Tuy nhiên, FirstOrDefault, trên lớp Enumerable, áp dụng foreach để lặp lại các mục. Điều này thực hiện một trình vòng lặp vào danh sách và dịch chuyển tiếp theo. Tôi nghĩ đa số gì nhiều người đang thấy là ngân sách chi tiêu chung của trình vòng lặp

public static TSource FirstOrDefault(this IEnumerable source, Func predicate) if (source == null) throw Error.ArgumentNull("source"); if (predicate == null) throw Error.ArgumentNull("predicate"); foreach (TSource source1 in source) if (predicate(source1)) return source1; return mặc định (TSource);Foreach chỉ cần đường tổng hợp khi thực hiện mẫu vô số. Chú ý vào hình hình ảnh này


*

.

Tôi đã nhấp vào foreach để xem phần lớn gì nó đang làm cho và bạn có thể thấy dotpeek mong muốn đưa tôi đến điều tra viên/hiện tại/tiếp theo tất cả ý nghĩa.

Xem thêm: Gluten Free Là Gì ? Phong Trào Gluten Free Là Gì Các Loại Thực Phẩm Gluten

Khác với điều đó về cơ bạn dạng là như thể nhau (kiểm tra vị ngữ được trải qua để coi liệu một mục có phải là điều bạn có nhu cầu không)

Nếu bạn thêm một bài bác kiểm tra lắp thêm ba:

//3. System.Collections.Generic.List foreachFunc dianaCheck = c => c.Name == diana;watch.Restart();foreach(var c in customers) if (dianaCheck(c)) break;watch.Stop();Console.WriteLine("Diana was found in 0 ms with System.Collections.Generic.List foreach.", watch.ElapsedMilliseconds);Nó chạy với vận tốc tương đương với tốc độ thứ nhất (25ms đối với 27ms đến FirstOrDefault)

EDIT: ví như tôi thêm một vòng lặp mảng, nó sẽ khá gần với tốc độ Find() với được devshorts quan sát trộm mã nguồn, tôi suy nghĩ rằng phía trên là:

//4. System.Collections.Generic.List for loopvar customersArray = customers.ToArray();watch.Restart();int customersCount = customersArray.Length;for (int i = 0; i Điều này chỉ chạy đủng đỉnh hơn 5,5% so với cách làm Find().

Vì vậy, loại dưới cùng: lặp qua các phần tử mảng nhanh hơn so với giải pháp xử lý foreach lặp bên trên đầu. (nhưng cả hai đều có ưu/nhược điểm của chúng, bởi vì vậy chỉ việc chọn điều hợp lí cho mã của người tiêu dùng một bí quyết hợp lý. Rộng nữa, chỉ hi hữu khi sự khác biệt nhỏ dại về tốc độ gây nên một vấn đề, bởi vì vậy chỉ việc sử dụng số đông gì có ý nghĩa cho khả năng duy trì/khả năng đọc)

24 LINQ: không phải bất kỳ vs toàn bộ Đừng

Khổ dữ Đầu tiên với khi sinh hoạt VIỆT NAM. Khát trường đoản cú với LINQ?

Xử lý cảnh báo cho các phép liệt kê của IEnumerable

Đo thời gian đúng mực để kiểm soát hiệu suất

Làm biện pháp nào để singin C # nhưng không sử dụng thư viện của bên thứ 3?

Nhận tất cả các tên cột của DataTable vào mảng chuỗi bằng phương pháp sử dụng (LINQ/Dự đoán)

Áp dụng tác dụng cho tất cả các nhân tố của tủ chứa đồ thông qua LINQ

Làm cụ nào để có được chỉ mục của một trong những phần tử trong IEnumerable?

in toàn bộ nội dung của mảng vào C #

Phân trang cùng với LINQ cho các đối tượng

Linq Query tiếp tục ném "Không thể sản xuất giá trị không thay đổi của loại System.Object ....", tại sao?

Làm ráng nào để làm việc với bọn chúng tôi

Cách cập nhật phần tử với danh sách bằng LINQ với C #

" data-cat="related-question">Sử dụng LINQ để xóa những thành phần khỏi list