我想按每条记录中的第二个元素对记录序列进行排序。问题是这些不是一个值,而只是一个类型。我有一个函数返回基于哪个类型的值。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