2010-11-30 35 views
3

合計F#n00b質問。 LISTデータ構造を並べ替えるにはどうすればいいですか?FでLISTを注文する方法

編集:申し訳ありませんが、私のデータ構造は実際にはリストです。

単に「.sort」を使用して働いていなかったので、多分私は私のコードを追加する必要があります

let getDataFromDb (db: MyDB) Id = 
Query.query <@ seq { 
    big honking database/FLinq query 
    yield (sec, pm, sr, trade, tradeRec, i, pm_firm, files, lt) 
} @> |> List.ofSeq 

私はこれまでのコードの最後の行を変更する場合:
} @> |> List.ofSeqを.sortByはFST
私は次の取得:

エラー1フィールド、コンストラクタまたはメンバー 'SORTBYが' が定義されていないが

ugh、何の痛み。

|> List.ofSeq |> List.sortBy 

しかし、私はこれを取得しています:私は今、これをしようとしている

エラー1型の不一致。 (b - > 'c) - >' bリスト - > 'bリスト'タイプの ' (セキュリティ* RoleContributor * RoleContributor * SuggestedTrade * SuggestedTradeRecommendation *アイデア* RoleContributor * SupportingUploadedFile * LargeText)リストは '」型と一致しない' - > 'b' が

+0

これは実際の生産コードのようです。もしそうなら、あなたの会社のポリシーに違反している可能性があります。 – vlad

+0

ええ、私はそれを隠すことを考えました。多分私はすべきです。 – Ramy

+0

try |> List.ofSeq | List.sortBy .. – BrokenGlass

答えて

5

Seq.sortByそれを行うだろう。

ソートは、ソート時に完全なシーケンスのキー値を知っていることを意味します。したがって、定義上、無限シーケンスでこれを使用することはできません。

編集: リストの等価は、同じ名前があります:あなたがリストを持っているようにそれはそう

新しい例から: List.sortBy

MSDNの例:

let sortedList2 = List.sortBy (fun elem -> abs elem) [1; 4; 8; -2; 5] 
printfn "%A" sortedList2 

編集2タプルの数。これは、タプル内のどの項目を検索するかによって異なります。

+0

申し訳ありませんが、私は間違ったデータのstrcutureについて尋ねました。 – Ramy

+0

this:ここから3番目(_、_、c)= cとしてください:http://msdn.microsoft.com/en-us/library/dd233200.aspxが役に立ちました。 – Ramy

3

他の人が言ったように、Seq.sortByは行く方法です。 FLinqを使用してデータベースからデータを読み取っている場合は、ソートをSQLサーバ(<@ .. @>で囲まれている)の一部として含めて、ソートがSQLサーバ上で行われるようにすることをお勧めします。

let getDataFromDb (db: MyDB) Id = 
    <@ seq { big honking database/FLinq query 
      yield (sec, pm, sr, trade, tradeRec, i, pm_firm, files, lt) 
    |> Seq.sortBy (fun (_, _, _, _, _, i, _, _, _) -> i) @> 
    |> List.ofSeq 

これは少しよりよいようにするには、ネストされたタプル例えばkey, (sec, pm, ..., lt)としてキーと他のすべての要素を含むタプルを返すことができ、その後、ちょうどソート最初の要素使用:

|> Seq.sortBy (fun (k, _) -> k) 

を(私は、LINQを持つタプルを使用して、いくつかのトラブルがありましたLINQ to SQLで動作するはずです)。

2

用途:

Query.query <@ ... @> 
|> List.sortBy (fun (sec, _, _, _, _, _, _, _, _) -> sec) 

なお、多くの要素を持つタプルを使用すると、F#で本当に悪いスタイルであること。フィールドに名前を付けて混乱を避けるために、レコード型のような構造のものを使用してください。

関連する問題