2011-09-07 48 views
6

Đây không phải là một câu hỏi phức tạp, nhưng tôi không thể quấn đầu quanh nó trong LINQ.Union A Danh sách các Danh sách Sử dụng LINQ

Tôi có một Enumerable<T> chứa một Enumerable<string>:

public class 
{ 
    List<List<string>> ListOfLists = new List<List<string>>(); 
} 

tôi về cơ bản muốn quay trở lại mỗi chuỗi duy nhất từ ​​ListOfLists; đây là dễ dàng sử dụng một vòng lặp foreach và một biến lưu trữ (có lẽ tôi có thể nâng cao hiệu quả của việc không có khác biệt ở phút cuối, nhưng đó không phải là điểm):

List<string> result = new List<string>(); 

foreach (var v in ListOfLists) 
{ 
    foreach (var s in v) 
    { 
     result.Add(s); 
    } 
} 

result.Distinct(); 

Làm thế nào để làm điều này với LINQ?

+0

Bạn đã có câu trả lời. Tôi sẽ đề nghị chụp ở phương pháp Extension với vấn đề này! Trong trường hợp các phương pháp mở rộng của bạn thực hiện phương pháp SelectMany và Distinct theo cách tối ưu. –

Trả lời

8
var distinctStrings = ListOfLists.SelectMany(list => list).Distinct(); 
1
var result = ListOfLists.SelectMany(v => v).ToList().Distinct(); 

EDIT: Đối với hiệu suất tốt hơn, sử dụng:

var result = ListOfLists.SelectMany(v => v).Distinct(); 

hoặc

var result = ListOfLists.SelectMany(v => v).Distinct().ToList(); 
+0

Không cần cho rằng ToList ở giữa – RichK

+0

Và nếu bạn đã cần các ToList, làm điều đó sau khi Distinct hơn là trước. Trong trường hợp này, Distinct của bạn hiện đang trả lại một số điện thoại IE2 có thể không phải là những gì bạn muốn. Ngoài ra, có một bộ nhớ/perf hit để làm ToList trên toàn bộ danh sách và sau đó hạn chế các kết quả đến Distinct hơn là làm Distinct đầu tiên. –

+0

@Jim Wooley - đề xuất tuyệt vời. Cảm ơn bạn và RichK đã phản hồi. Chúng tôi đã học. – Leons

5

Để hoàn chỉnh, cú pháp biểu thức truy vấn là đôi khi dễ dàng hơn (tôi thấy) để đến với lời gọi chính xác của SelectMany. Dưới đây là:

result = (from list in ListOfLists 
      from s in list 
      select s).Distinct().ToList(); 
+0

+1 cho cú pháp truy vấn trên SelectMany –

Các vấn đề liên quan