2015-06-04 24 views

Trả lời

13
let myList = [ 1; 2; 2; 3; 4; 3 ] 
let distinctList = myList |> Seq.distinct |> List.ofSeq 

Kết quả:

> 
val myList : int list = [1; 2; 2; 3; 4; 3] 
val distinctList : int list = [1; 2; 3; 4] 

Tiếp F # phiên bản (4.0) sẽ có List.distinct chức năng

+0

Tôi là một chút bối rối bởi mã này (mà hoạt động tuyệt vời). Vì vậy, bạn có thể vượt qua một danh sách để Seq.distinct? ... không chờ ... là vì danh sách thực hiện seq (er..tất cả các thuật ngữ chức năng là gì)? –

+1

Chuỗi trong F # được thể hiện bằng loại 'seq <'T>', là một bí danh cho 'IEnumerable'. Danh sách thực hiện 'IEnumerable' để bạn có thể gọi tất cả các chức năng của mô-đun' Seq' trên đó. Nhưng nếu bạn cần danh sách kết quả là bạn phải chuyển đổi kết quả 'seq' trở lại danh sách bằng cách sử dụng' List.ofSeq' chức năng. – Petr

+0

OK, điều đó có ý nghĩa. Cảm ơn! –

3

Không chắc chắn nếu tồi tệ hơn hoặc tốt hơn Petr answer nhưng bạn cũng có thể làm:

let distinct xs = xs |> Set.ofList |> Set.toList 

> distinct [ 1; 2; 2; 3; 4; 3 ];; 
val it : int list = [1; 2; 3; 4] 
+0

Cảm ơn bạn đã sử dụng lại chức năng! F # thật tuyệt. : D –

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