Alk*_*Alk 3 .net f# list sequence
给定一个整数列表,我们可以执行以下操作来获取不同值的列表.
let myList = [ 1; 2; 2; 3; 4; 3 ]
let distinctList = myList |> Seq.distinct |> List.ofSeq
Run Code Online (Sandbox Code Playgroud)
但是,在我的情况下,我有一个自定义类型的列表,定义如下:
type Listing(fromDate:NSDate, toDate:NSDate, pricePerNight:int, landlordId:String, landlordName:String, listingId:String, pic1url:NSUrl, pic2url:NSUrl, pic3url:NSUrl, pic4url:NSUrl, pic5url:NSUrl, postcode:String, latitude:Double, longitude:Double, location:String, partnername:String,partnerid:String) =
member this.fromDate : NSDate = fromDate
member this.toDate : NSDate = toDate
member this.pricePerNight : int = pricePerNight
member this.landlordId : String = landlordId
member this.landlordName : String = landlordName
member this.listingId : String = listingId
member this.pic1url : NSUrl = pic1url
member this.pic2url : NSUrl = pic2url
member this.pic3url : NSUrl = pic3url
member this.pic4url : NSUrl = pic4url
member this.pic5url : NSUrl = pic5url
member this.postcode : String = postcode
member this.latitude : Double = latitude
member this.longitude : Double = longitude
member this.location : String = location
member this.partnername : String = partnername
member this.partnerid : String = partnerid
Run Code Online (Sandbox Code Playgroud)
接下来我有一个如下定义的列表:
let mutable listings : List<Listing> = List.Empty
Run Code Online (Sandbox Code Playgroud)
现在我想过滤此列表以仅获取唯一值(如果值具有唯一值,则该值是唯一的listingId).我可以用天真的方式做到这一点并将所有内容添加listingId到字符串列表中,对字符串列表执行不同的操作,然后使用不同列表中的ID提取列表,但我认为必须有更好的方法.
您可以使用Seq.distinctBylambda函数获取所需的唯一性值:
listings |> Seq.distinctBy (fun l -> l.listingId)
Run Code Online (Sandbox Code Playgroud)