cách hiệu quả nhất để viết một phương pháp mà sẽ so sánh n danh sách và trả lại tất cả các giá trị mà không xuất hiện trong tất cả danh sách là gì, do đóLINQ có giá trị không được chia sẻ trên nhiều danh sách
var lists = new List<List<int>> {
new List<int> { 1, 2, 3, 4 },
new List<int> { 2, 3, 4, 5, 8 },
new List<int> { 2, 3, 4, 5, 9, 9 },
new List<int> { 2, 3, 3, 4, 9, 10 }
};
public IEnumerable<T> GetNonShared(this IEnumerable<IEnumerable<T>> lists)
{
//...fast algorithm here
}
nên
rằngdanh sách.GetNonShared();
lợi nhuận 1, 5, 8, 9, 10
tôi đã
public IEnumerable<T> GetNonShared(this IEnumerable<IEnumerable<T>> lists)
{
return list.SelectMany(item => item)
.Except(lists.Aggregate((a, b) => a.Intersect(b));
}
Nhưng tôi không chắc chắn nếu đó là hiệu quả. Đặt hàng không quan trọng. Cảm ơn!
Bạn không chắc chắn nếu đó là "hiệu quả"? Đó không phải là vấn đề. Vấn đề là: ngữ nghĩa có chính xác không và nó có đáp ứng các yêu cầu về hiệu năng của bạn không? Ngữ nghĩa của việc thực hiện của bạn là chính xác. Chỉ bạn mới có thể biết liệu nó có đáp ứng các yêu cầu về hiệu suất của bạn hay không. – jason