F#迭代KeyValuePair的序列并打印所有键、值。如果列表不为空,则使用F失败
我有一个KeyValuePair的序列,我想打印所有的键和值,然后如果列表不是空的并且变量值为true,我想失败(failOnError) 我的尝试如下,但在第一次迭代打印1 KeyValuePair后总是失败F#迭代KeyValuePair的序列并打印所有键、值。如果列表不为空,则使用F失败,f#,functional-programming,sequence,seq,F#,Functional Programming,Sequence,Seq,我有一个KeyValuePair的序列,我想打印所有的键和值,然后如果列表不是空的并且变量值为true,我想失败(failOnError) 我的尝试如下,但在第一次迭代打印1 KeyValuePair后总是失败 Seq.map(fun kvp -> printfn "Key: %s" kvp.Key printfn "Value: %s" kvp.Value kvp) |> fun s
Seq.map(fun kvp ->
printfn "Key: %s" kvp.Key
printfn "Value: %s" kvp.Value
kvp)
|> fun seq ->
if not (Seq.isEmpty seq) && failOnError
then
failwithf "There is Errors see above messages"
有什么想法吗?F#中的序列是懒惰的:它们只会根据需要迭代尽可能多的元素。有些操作需要获取序列的所有元素,如Seq.toList
。但是Seq.map
不是其中之一:当您执行Seq.map
时,您仍然有一个尚未遍历任何元素的惰性序列。而Seq.isEmpty
将只迭代一个元素,因为这就是证明序列不是空的全部条件
您可能需要将Seq.isEmpty
替换为Seq.toList |>List.isEmpty
。然后,您将遍历所有元素。还要注意的是,不管您的failOnError
值是否为true,您最终都会遍历所有元素。如果您只想在failOnError
为false时打印键和值,那么您应该更改If
语句的顺序:If failOnError&¬(seq |>seq.toList |>List.isEmpty)
F#中的序列是惰性的:它们只会根据需要迭代尽可能多的元素。有些操作需要获取序列的所有元素,如Seq.toList
。但是Seq.map
不是其中之一:当您执行Seq.map
时,您仍然有一个尚未遍历任何元素的惰性序列。而Seq.isEmpty
将只迭代一个元素,因为这就是证明序列不是空的全部条件
您可能需要将
Seq.isEmpty
替换为Seq.toList |>List.isEmpty
。然后,您将遍历所有元素。还要注意的是,不管您的failOnError
值是否为true,您最终都会遍历所有元素。如果只想在failOnError
为false时打印键和值,则应更改If
语句的顺序:If failOnError&¬(seq |>seq.toList |>List.isEmpty)
Hi@rmunn感谢您提供的完整答案和F#Seq的背景信息。我现在看到问题,您的提案完成任务:)Hi@rmunn感谢您提供的完整答案和F#Seq的背景信息。我现在看到问题,您的提案完成任务:)