Cho*_*890 1 .net arrays sorting f# optional
我有一个F#record type(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
Run Code Online (Sandbox Code Playgroud)
Fyo*_*kin 11
您的比较功能有错误的逻辑.尝试一步一步地运行它.你看:如果两个req1和req2的Some,那么你的函数将返回-1.不是你期望的,是吗?
我宁愿用模式匹配来表达它:
let sort (req1:Request<_>) (req2:Request<_>) =
match req1.ResourceCondition, req2.ResourceCondition with
| None, Some _ -> 1
| Some _, None -> -1
| _ -> 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |