gpt4 book ai didi

f# - 如何从 Map 构造键列表?

转载 作者:行者123 更新时间:2023-12-01 11:42:04 25 4
gpt4 key购买 nike

我正在尝试从 Map 构建键列表。这就是我所做的:

Map.fold (fun state key value -> state::value) [] [("one", 1); ("two", 2)]

但是,state::value 位会产生此错误:

tryout.fs(146,48): error FS0001: Type mismatch. Expecting a
'a
but given a
'a list

我的代码有什么问题?

最佳答案

其他人已经发布了很好的解决方案,所以只是回答你的问题并解释你的代码有什么问题 - 因为你正在使用 Map.fold 我假设你的数据源实际上是一个 map 并且不是列表:

let sample = Map.ofSeq [("one", 1); ("two", 2)]

这是您的原始解决方案和一个并排工作的解决方案:

// Original version - attempts to add 'state' as the new head of a list 'value'
Map.fold (fun state key value -> state::value) [] sample
// Corrected version - adds 'key' as the new head of a list 'state'
Map.fold (fun state key value -> key::state) [] sample

关键是 :: 运算符需要在左侧有一个值(此处为 string),另一个列表(此处为 string list) 在右边。您正确地创建了一个空列表 [] 作为初始状态。

当你想在折叠过程中添加新键时,你需要将现有列表(state)作为 :: 的正确参数和新键( key) 作为左参数 - 创建一个新列表,其中包含键作为第一个元素,所有剩余元素作为列表的其余部分()。

所以 1) :: 的参数顺序很重要,并且 2) 你想收集键而不是值,但如果你收集值,它会以同样的方式工作。

关于f# - 如何从 Map 构造键列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19251999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com