如何从 F# Seq 获取连续值对
我有一个带有 {"1";"a";"2";"b";"3";"c";...}
的序列。
如何将此序列转换为 {("1","a");("2","b");("3","c");...}
I have a sequence with {"1";"a";"2";"b";"3";"c";...}
.
How can I transform this seq into {("1","a");("2","b");("3","c");...}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
这是一个非常聪明的解决方案:
Here is a much-too-clever solution:
枚举器并不总是邪恶的。
以下是来自
FSharp.Core/seq.fs
的Seq.pairwise
的 F# 源代码Enumerators are not always evil.
Here is the F# source code of
Seq.pairwise
taken fromFSharp.Core/seq.fs
从 F# 4.0 开始,您现在可以使用 chunkBySize
Since F# 4.0, you can now use chunkBySize
这是 @Brian 解决方案的一个变体:
这是一个使用 Seq.scan 的大脑融化器:
Here's a variation on @Brian's solution:
And here's a brain-melter using Seq.scan:
您可以考虑使用 LazyLists 来实现此目的。
You might consider using LazyLists for this.
您可以按以下方式使用模式匹配:
但是您必须决定如果列表有奇数个元素该怎么办(在我的解决方案中生成了一对具有相同值的元素)
You can use pattern matching in the following way:
but you have to decide what to do if the list has an odd number of elements (in my solution a pair with same value is produced)