각 레코드의 두 번째 요소로 레코드 시퀀스를 정렬하려고합니다. 문제는 이것들이 값이 아니고 그저 하나의 타입이라는 것입니다. 내가 어떤 유형을 기반으로 값을 반환하는 함수가 있습니다.F # 값이 아직 시퀀스에서 유형에 할당되지 않은 레코드의 정렬 순서
type Suit = Spades | Clubs | Hearts | Diamonds
type Rank = Ace | Two | Three | Four | Five | Six | Seven | Eight | Nine | Ten | Jack | Queen | King
type Card = { suit: Suit; rank: Rank}
type Hand = Card seq
let cardValue(card:Card) =
if (card.rank = Ace) then 1
elif (card.rank = Two) then 2
elif (card.rank = Three) then 3
elif (card.rank = Four) then 4
elif (card.rank = Five) then 5
elif (card.rank = Six) then 6
elif (card.rank = Seven) then 7
elif (card.rank = Eight) then 8
elif (card.rank = Nine) then 9
elif (card.rank = Ten) then 10
elif (card.rank = Jack) then 10
elif (card.rank = Queen) then 10
elif (card.rank = King) then 10
else 0
let sortHandByValue(hand:Hand) =
......missing code here......
를하고 내가 뭘하려고 오전 값으로 순위를 기준으로 정렬 손입니다 :
이 내가 가진 것입니다.
예를 들면 손은 현재 {{Hearts; 세}; {스페이드 한 벌; 잭}; {다이아 패 한 벌; 2}}
결과가 다음과 같이 정렬됩니다. {{Diamonds; 두}; {하트; 세}; {스페이드 한 벌; Jack}}
Seq.sort |> Seq.groupBy id |> Seq.map snd하지만 값으로 정렬하고 알파벳순으로 만 정렬하지 않습니다.
유형을 변경할 수는 없지만 다른 모든 것은 변경할 수 있습니다. 감사합니다. 감사합니다.
시퀀스는 튜플이 아니라 레코드입니다. – s952163
'hand |> Seq.sortBy cardValue' ..? – ildjarn
나는 또한'Rank * Suit'가 소화하기 더 쉽다고 생각한다. – s952163