2010-03-19 34 views

Trả lời

16

Hành vi được xác định của Enumerable.Distinct là nó sẽ trả về bộ sưu tập không có thứ tự (Documentation).

Tuy nhiên, việc triển khai Hiện tại riêng biệt trong LINQ to Objects sẽ giữ nguyên thứ tự. Điều này không được đảm bảo cho các nhà cung cấp LINQ khác và hành vi không nên dựa vào.

+0

Vì vậy, đôi khi nó sẽ trả về '{3, 2, 4, 10, 6, 7, 1}' (ví dụ) đôi khi thay vì theo thứ tự các mục đã gặp phải? Bạn có lẽ có bất kỳ liên kết cho điều này hoặc một mã ví dụ có lẽ? – Cornelius

+0

@Cornelius xem câu trả lời cập nhật của tôi – JaredPar

+0

Câu trả lời tương tự cho Queryable.Distinct (trả về chuỗi không theo thứ tự) xem [DISTINCT() và ORDERBY issue] (// stackoverflow.com/a/12429107) –

0

Nói chung: không, nhưng trong trường hợp của bạn (có mảng int): có thể là có. Tôi cá là họ chỉ liệt kê bộ sưu tập và bỏ qua những thứ họ đã gặp. Nhưng đừng tính vào hành vi đó trên các phiên bản khác nhau của .NET hoặc cho các loại bộ sưu tập khác nhau.

Như JaredPar đã chỉ ra trong câu trả lời của mình, kết quả được chỉ định là không theo thứ tự. Nếu bạn muốn một số thứ tự cụ thể, bạn cần phải sắp xếp chúng sau đó bằng cách sử dụng bất kỳ thuật toán có ý nghĩa trong trường hợp của bạn.

2

Tôi nghĩ từ "không theo thứ tự" có nghĩa là cùng thứ tự của chuỗi gốc.
Do đó, người gọi nên quyết định có nên sắp xếp kết quả hay không.

+3

Bạn nghĩ từ "không có thứ tự" có nghĩa là "theo một thứ tự cụ thể"? Đó là một điều kỳ lạ để suy nghĩ! :-) "Không theo thứ tự" có nghĩa là "không theo thứ tự cụ thể". –

+0

@Eric: Tôi hy vọng bạn đọc nhận xét này. Ý tôi là (và tôi nghĩ ngụ ý), thứ tự của chuỗi giá trị trả về không được sửa đổi (tức là thứ tự của chuỗi được trả về được duy trì khi thứ tự của chuỗi được truyền vào). Tôi đã nói "vô trật tự" ở đâu theo thứ tự cụ thể? Do đó, theo trường hợp trên 'int [] nums = {2, 3, 3, 4, 2, 1, 6, 7, 10};', chuỗi được trả về sẽ không sắp xếp giá trị trả về và sẽ trả về '2, 3,4,1,6, 7, 10'. – shahkalpesh

+3

Và thứ tự đó - thứ tự mà chuỗi gốc xuất hiện - là một thứ tự cụ thể, một trong hàng triệu đơn đặt hàng có thể. Tài liệu của phương pháp này không đảm bảo rằng thứ tự cụ thể này là thứ tự được chọn. Trong * thực hành * thứ tự cụ thể này được chọn. Nhưng bởi "không có thứ tự" tài liệu có nghĩa là * bất kỳ thứ tự nào * có thể được lựa chọn bằng cách thực hiện. Đôi khi nó là hiệu quả hơn để không bảo tồn thứ tự ban đầu. –

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