我想按每條記錄中的第二個元素對記錄序列進行排序。問題是這些不是一個值,而只是一個類型。我有一個函數返回基於哪個類型的值。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......
和我所試圖做的是手工排序由排名作爲一種價值。
因此,例如手是目前:{{心;三}; {黑桃;插口}; {鑽石;兩個}}
它將排序手,結果是:{{Diamonds;二}; {心;三}; {黑桃;傑克}}
我試過手|> Seq.sort |> Seq.groupBy id |> Seq.map snd但它不按值排序,只按字母順序排列。
我不能改變任何類型,但我可以改變一切。 任何想法將不勝感激,謝謝!
你的序列不是元組而是記錄。 – s952163
'hand |> Seq.sortBy cardValue' ..? – ildjarn
我也覺得'秩* Suit'是容易消化... – s952163