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

时间:2015-11-11 23:27:37

标签: 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**  |> should equal true
  1. 我真的需要将chunkBySize生成的数组转换为列表吗?
  2.   

    |&GT; Seq.toList

    1. 如何确认行中键值对的所有值都设置为true?

    2. 如何为所有行验证此内容?

    3. 注:

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

1 个答案:

答案 0 :(得分:2)

一种选择是使用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循环并单独检查值:

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

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