Tôi đang cố gắng làm những gì tôi nghĩ là "không giao nhau" (tôi không chắc tên đúng là gì, nhưng đó là những gì Tim Sweeney của EpicGames gọi nó là trong UnrealEd cũ)Cách nhanh hơn để thực hiện Danh sách <T> .Contains()
// foo and bar have some identical elements (given a case-insensitive match)
List‹string› foo = GetFoo();
List‹string› bar = GetBar();
// remove non matches
foo = foo.Where(x => bar.Contains(x, StringComparer.InvariantCultureIgnoreCase)).ToList();
bar = bar.Where(x => foo.Contains(x, StringComparer.InvariantCultureIgnoreCase)).ToList();
Sau đó, tôi làm một việc khác mà tôi trừ kết quả từ bản gốc để xem phần nào tôi đã xóa. Đó là siêu nhanh bằng cách sử dụng .Except(), do đó, không có rắc rối ở đó.
Phải có cách nhanh hơn để thực hiện việc này, vì điều này có hiệu suất kém với ~ 30.000 phần tử (của chuỗi) trong Danh sách. Tốt hơn là, một phương pháp để thực hiện bước này và một phương pháp sau này trong một lần giảm sẽ là tốt đẹp. Tôi đã thử sử dụng .Exists() thay vì .Contains(), nhưng nó hơi chậm hơn. Tôi cảm thấy một chút dày, nhưng tôi nghĩ rằng nó nên có thể với một số sự kết hợp của .Except() và .Intersect() và/hoặc .Union().
Tại sao bạn làm điều đó hai lần? Không phải là lần đầu tiên có so sánh cung cấp cho bạn tất cả các trận đấu? Trừ khi tôi hiểu sai. – gcores
Tôi cần phải bảo vệ trường hợp, có thể (và nên) khác nhau giữa hai danh sách. Về cơ bản, đây là chương trình so sánh thư mục tự động có thể đồng bộ hóa trường hợp đường dẫn và tên tệp và bỏ qua các mục nhập không khớp trên cả hai mặt. –