Sử dụng nhóm bằng các công cụ, hiệu suất của những phương pháp này khá tốt. Chỉ có mối quan tâm là chi phí bộ nhớ lớn nếu bạn đang làm việc với các tập dữ liệu lớn.
from g in (from x in data group x by x)
where g.Count() > 1
select g.Key;
--hoặc nếu bạn thích phương pháp khuyến nông
data.GroupBy(x => x)
.Where(x => x.Count() > 1)
.Select(x => x.Key)
đâu Count() == 1
đó là mục riêng biệt của bạn và nơi Count() > 1
đó là một hoặc nhiều mục trùng lặp.
Kể từ LINQ là loại lười biếng, nếu bạn không muốn phải đánh giá lại tính toán của bạn, bạn có thể làm điều này:
var g = (from x in data group x by x).ToList(); // grouping result
// duplicates
from x in g
where x.Count() > 1
select x.Key;
// distinct
from x in g
where x.Count() == 1
select x.Key;
Khi tạo nhóm một tập hợp các bộ sẽ được tạo ra. Giả sử rằng đó là một tập hợp với O(1)
chèn thời gian chạy của nhóm theo cách tiếp cận là O(n)
. Chi phí phát sinh cho mỗi hoạt động là hơi cao, nhưng nó phải tương đương với hiệu suất gần tuyến tính.
Nguồn
2010-06-29 07:40:39
Giải pháp tốt với bộ băm. Tôi đã suy nghĩ theo những dòng đó, nhưng rõ ràng là chưa thức dậy ... – Noldorin
Giải pháp tốt với bộ băm thực sự! Tôi biết tôi có thể làm theo cách đó, nhưng không biết có thể mở rộng ngôn ngữ như thế được không! – user375049