gpt4 book ai didi

f# - 将 F# List.sort 与具有 CustomComparison 的类型一起使用

转载 作者:行者123 更新时间:2023-12-02 08:22:50 25 4
gpt4 key购买 nike

我试图在 F# 中定义一个类型,它有一个 id 和一个值,并且在排序时只考虑值。我已经简化了情况以提供一个有希望的清晰示例。

到目前为止,我有以下内容:

[<CustomEquality; CustomComparison>]
type EquatableValue<'T when 'T : comparison> =
{ id : string; value : 'T }

override x.Equals(yobj) =
match yobj with
| :? EquatableValue<'T> as y ->
x.value = y.value
| _ -> false

override x.GetHashCode() =
hash x.value

interface System.IComparable with
member x.CompareTo yobj =
match yobj with
| :? EquatableValue<'T> as y ->
compare x.value y.value
| _ -> invalidArg "yobj" "cannot compare values of different types"

let a = {id="a";value=5}
let b = {id="b";value=4}
let c = {id="c";value=7}
let d = {id="d";value=1}

let x = [a,b,c,d]

let sorted = x |> List.sort

我希望 sorted 的元素按照(按 id)d、b、c、a 的顺序排列。

但这会导致顺序为 a、b、c、d。

谁能帮助我理解我做错了什么?

非常感谢。

最佳答案

您的列表仅包含一个元素 - 由 4 个值组成的元组:

let x = [a,b,c,d] 

使用

let x = [a;b;c;d] 

因为list的元素被';'分割

关于f# - 将 F# List.sort 与具有 CustomComparison 的类型一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35207452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com