我有一个F#记录类型(Request<'a>
),其中一个字段定义为('a -> bool) option
。在某些时候,我有一个这种记录类型的数组,并希望对它进行排序,以便所有Some ('a -> bool)
的那些都是第一个(最低索引),所有那些None
将是最后一个(最高指数)。
我尝试过以下操作,但这似乎不起作用,因为我有一些位于数组的中间/末尾:
let sort (req1:Request<'a>) (req2:Request<'a>) =
if req1.ResourceCondition.IsSome
then
-1
else if req2.ResourceCondition.IsSome
then
1
else
0
let reqArray = Array.sortWith sort fifoArray
答案 0 :(得分:11)
您的比较功能存在缺陷逻辑。尝试一步一步地运行它。看:如果req1
和req2
都是Some
,那么您的函数将返回-1。不是你期望的,不是吗?
我宁愿用模式匹配表达它:
let sort (req1:Request<_>) (req2:Request<_>) =
match req1.ResourceCondition, req2.ResourceCondition with
| None, Some _ -> 1
| Some _, None -> -1
| _ -> 0