好吧,这看起来应该很容易,但我只是没有得到它。如果我有一系列数字,我如何生成一个由运行总数组成的新序列?例如对于序列[1; 2; 3; 4],我想将它映射到[1; 3; 6; 10]。以适当的功能方式。f#运行总数
Q
f#运行总数
5
A
回答
14
5
> Seq.scan (fun acc n -> acc + n) 0 [1;2;3;4];;
val it : seq<int> = seq [0; 1; 3; 6; ...]
随着名单:
> [1;2;3;4] |> List.scan (fun acc n -> acc + n) 0 |> List.tail;;
val it : int list = [1; 3; 6; 10]
编辑:另一种方式与序列:
let sum s = seq {
let x = ref 0
for i in s do
x := !x + i
yield !x
}
是的,有一个可变的变量,但我觉得它更具可读性(如果你想获得摆脱领先的0)。
+0
很酷,谢谢。然而,它似乎产生了一个更大的序列,初始值为0,它是否不像真实的地图。 – Aidan 2011-03-29 21:27:41
0
不知道这是最好的方式,但它应该使用Seq.scan
做的伎俩
let input = [1; 2; 3; 4]
let runningTotal =
(input, 0)
|> Seq.unfold (fun (list, total) ->
match list with
| [] ->
None
| h::t ->
let total = total + h
total, (t, total) |> Some)
|> List.ofSeq
13
相关问题
- 1. 运行递归F#
- 2. 运行F#测试
- 3. F#如何防止运行Console.Readline()函数
- 4. 计算运行总数
- 5. gridcomplete函数总是运行?
- 6. 计算运行总数
- 7. RDLC计算运行总数?
- 8. F#ionide websharperserverclient - 如何运行
- 9. F#运行NUnit测试
- 10. TSQL - 运行总
- 11. 运行总计
- 12. 通过ID运行总计行数
- 13. MSTest F# - 并行运行测试
- 14. SQL运行总数从一个计数
- 15. 运行各种参数的总数
- 16. F#数组总和不能打印
- 17. 添加行,运行计数,运行总和以查询结果
- 18. TSQL运行总和
- 19. ListView运行总计
- 20. 运行总计Sybase
- 21. SQL运行总计
- 22. 效益运行的命令行PHP与参数“-f”
- 23. DAX - 运行总数 - 多个Critiera +分组
- 24. 如何分解运行总数?
- 25. 计算Linq中的运行总数
- 26. 在asp.net Gridview中计算运行总数
- 27. 使用计算器的运行总数
- 28. SQL运行总数分组极限
- 29. 多个度量的运行总数
- 30. 运行总数与否定字段
这是非常酷的,但我希望做一个序列而不是一个列表。 – Aidan 2011-03-29 21:33:10
@Aidan:编辑添加适当的Seq.scan实现。 – ildjarn 2011-03-29 21:37:35
很酷,就是那个。谢谢。 – Aidan 2011-03-29 21:47:37