gpt4 book ai didi

f# - F# List.scan 中的初始状态

转载 作者:行者123 更新时间:2023-12-03 19:38:13 25 4
gpt4 key购买 nike

我有一个简单的问题,因为我是 F# 新手,我似乎无法弄清楚如何做到这一点。我有一个元组列表:

let l = [ (a, 2); (b, 3); (c, 2); (d, 6) ]

我想变成这样:
let r = [ (a, 2); (b, 5); (c, 7); (d, 13) ]

这只是将每个元组中第二个元素的值相加: 2 + 3 + 2 + 6 .对象 a , b , cd是我只想保留的复杂对象。

我想我应该使用 List.scan为了这。它需要一个列表,通过计算线程累加器并返回一个列表:
let r = l |> List.scan (fun (_, s) (o, i) -> (o, s + i)) (??, 0) |> List.tail

但我不知道该填什么问号。除了 0,我对初始状态不感兴趣。 .而且我不想指定第一个元组元素的一些“空”实例。

或者有没有更简单的方法来做到这一点?

最佳答案

您可以使用第一个元素作为初始状态:

let l = [ ("a", 2); ("b", 3); ("c", 2); ("d", 6) ]

let x::xs = l
let res = (x, xs) ||> List.scan (fun (_, x) (o, n) -> o, x + n) // [("a", 2); ("b", 5); ("c", 7); ("d", 13)]

空列表的特殊情况应单独处理

关于f# - F# List.scan 中的初始状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3607185/

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