2016-05-09 8 views
1

F#レコードタイプ(Request<'a>)のフィールドの1つに('a -> bool) optionと定義されています。ある時点で、私はこのレコードタイプの配列を持っていて、Some ('a -> bool)のものがすべて最初(最低インデックス)になり、Noneのものがすべて最後(最高インデックス)になるように並べ替えたいと思います。Someを含むすべての要素が前面になるように配列を並べ替える

私は次のことをやって試してみましたが、私は、配列の途中/終わりであることを、それらのいくつかを持っているとして、これは動作していないよう:

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 

答えて

11

あなたの比較機能は、ロジックが不備ました。ステップバイステップで実行してみてください。 Look:もしreq1req2Someなら、関数は-1を返します。あなたが期待するものではありませんか?

私はむしろパターンマッチングの点でそれを表現することになる。

let sort (req1:Request<_>) (req2:Request<_>) = 
    match req1.ResourceCondition, req2.ResourceCondition with 
    | None, Some _ -> 1 
    | Some _, None -> -1 
    | _ -> 0 
関連する問題