2010-11-30 6 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가'정의되지 않습니다

우, 고통스러워.

|> List.ofSeq |> List.sortBy 

하지만이납니다 : : 지금이 노력하고있어

오류 1 유형이 일치하지 않습니다. (b -> c) -> b 목록 -> b 목록 -> 'b'목록 -> 'a'(보안 * RoleContributor * RoleContributor * SuggestedTrade * 추천 된 제안서 추천 * 아이디어 * RoleContributor * SupportingUploadedFile * LargeText) (보안 * RoleContributor * RoleContributor * SuggestedTrade * SuggestedTradeRecommendation * 아이디어 * RoleContributor * SupportingUploadedFile * LargeText) 목록 ''유형과 일치하지 않습니다 'A ->'B '

+0

이것은 실제 생산 코드와 비슷합니다. 그렇다면 SO와 같은 사이트에 게시하는 것은 회사 정책에 위배됩니다. – 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 : 여기서 세 번째 (_, _, c) = c를 사용하십시오. http://msdn.microsoft.com/en-us/library/dd233200.aspx 도움이되었습니다. – Ramy

3

다른 사람들이 말했듯이 Seq.sortBy 가야합니다. FLinq를 사용하여 데이터베이스의 일부 데이터를 읽는 경우 정렬을 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 
|> Seq.sortBy (fun (k, _) -> k) 

(나는 LINQ와 튜플을 사용하여 몇 가지 문제가 있었다 :

는 더 좋은이 조금, 당신은 튜플 키 포함하고 중첩 된 튜플 예를 들어 key, (sec, pm, ..., lt) 다른 모든 요소와 다음 단지 종류의 첫 번째 요소를 사용하여 반환 할 수 있도록하려면 엔티티,하지만 그것은 SQL에 LINQ에서 작동해야한다고 생각).

2

사용 : 많은 요소 튜플을 사용하면 정말 F 번호에 나쁜 스타일이다

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

참고. 필드에 이름을 부여하고 혼란을 피하기 위해 레코드 유형과 같이 더 구조화 된 것을 사용하십시오.

관련 문제