如何选择列表中的第一组元素?

时间:2015-12-03 18:04:51

标签: f#

如何通过索引选择列表中的第一组元素?

我正在努力思考功能,即使下面的代码在尝试检索前两张卡时有些必要。

let deal (deck: Card list) =
// ------------------------------------
//  let card1 = deck |> Seq.item 0 // Rewrite this logic of getting first two cards
//  let card2 = deck |> Seq.item 1
// ------------------------------------
    let hand = [<get first two elements in deck>]
    let deckUsed = deck |> Seq.except [card1; card2;]
    (card1, card2, deckUsed);;

2 个答案:

答案 0 :(得分:3)

这样的事情怎么样?

let deal =
    function
    |card1::card2::deckUsed -> Some (card1, card2), deckUsed
    |_ -> None, []

您可以检索结果:

let hand, newDeck = deal deck
    match hand with
    |Some (card1, card2) -> // do something with the cards
    |None -> // do something if no cards

我刚刚使用了一个简单的选项类型,但您可能想要使用更具描述性的联合案例来处理来自牌组的牌局并尝试从空牌中进行交易。

编辑:我从选项类型中取出了套牌列表,因为您始终可以将空牌组映射回空牌,这在某些用例中可能会很方便。

答案 1 :(得分:2)

您可以使用模式匹配:

let card1 :: card2 :: unused = deck

请注意,对于卡片数少于两张的deck,此操作会失败,索引也是如此。