从 F# 中的序列中删除单个非唯一值

2024-01-06

我有一个代表 F# 中骰子的整数序列。

在所讨论的游戏中,玩家有一池骰子,可以选择玩一个(受某些规则约束)并保留其余的。

例如,如果玩家掷出 6、6 和 4,并决定玩一个 6,是否有一种简单的方法可以返回仅删除一个 6 的序列?

Seq.filter (fun x -> x != 6) dice

删除所有 6,而不仅仅是一个。


对序列进行不平凡的操作是很痛苦的,因为它们不支持模式匹配。我认为最简单的解决方案如下:

let filterFirst f s =
    seq {
        let filtered = ref false
        for a in s do
            if filtered.Value = false && f a then
                filtered := true
            else yield a
    }

只要可变实现对客户端隐藏,它仍然是函数式风格;)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 F# 中的序列中删除单个非唯一值 的相关文章

随机推荐