F# 如何验证一组键值对中的值?

F# 如何验证一组键值对中的值?,f#,F#,如何验证一组键值对中的值 [<Test>] let ``player has connected row`` () = let grid = [ for i in 0..8 -> (i, true) ] |> Map.ofSeq let rows = grid |> Seq.chunkBySize 3 |> Seq.toList rows.Head.[0..] ** verify all values from list is true

如何验证一组键值对中的值

[<Test>]
let ``player has connected row`` () =
    let grid = [ for i in 0..8 -> (i, true) ] |> Map.ofSeq
    let rows = grid |> Seq.chunkBySize 3 |> Seq.toList
    rows.Head.[0..] ** verify all values from list is true**  |> should equal true
[]
让“`player已连接行”`()=
设网格=[对于0..8中的i->(i,true)]|>Map.ofSeq
让rows=grid |>Seq.chunkBySize 3 |>Seq.toList
rows.Head。[0..]**验证列表中的所有值是否为真**|>应等于真
  • 我真的需要将chunkBySize生成的数组转换为列表吗
  • |>序号:toList

  • 如何验证键-值对中的所有值都从行设置为true

  • 我如何对所有行验证这一点

  • 注:


    我是F#新手,请原谅我的无知。

    一个选项是使用
    Seq.forall
    函数:

    rows.Head |> Seq.forall (fun kvp -> kvp.Value) |> should equal true
    
    这里,
    forall
    将返回
    true
    ,如果指定的条件适用于序列中的所有输入(在条件中,我们只返回布尔值)。要对所有行执行此操作,可以再次使用
    Seq.forall

    rows |> Seq.forall (fun row -> 
      row |> Seq.forall (fun kvp -> kvp.Value)) |> should equal true
    
    这不再需要将输入转换为列表,因为它只使用
    Seq
    函数

    您也可以对循环使用普通的
    ,并分别检查值:

    for row in rows do
      for kvp in row do
        kvp.Value |> should equal true
    

    我想这可能不会让测试纯粹主义者感到高兴,因为我们正在签入F#代码,而不是将其指定为单个声明性断言。虽然我不确定是否有更好的方法,我可能会使用
    for
    循环来编写它。

    谢谢。关于如何对所有行执行此操作,有什么想法吗?这对我来说真的很陌生。更多的样本刚刚添加:)