gpt4 book ai didi

c# - Option 集合的功能转换

转载 作者:行者123 更新时间:2023-12-02 10:51:13 26 4
gpt4 key购买 nike

我收集了Option<T>实例并希望从 IEnumerable<Option<T>> 进行转换至Option<IEnumerable<T>>

如果所有选项都有值,那么我想要 Some<IEnumerable<T>>与收集的值,如果集合中任何的项目是 None ,那么我想要一个None<IEnumerable<T>>

这似乎是一个相当常见的函数转换,但我不确定它是否存在于主流函数库中,或者它会被称为什么。看起来类似于 FlatMap ,但不完全是,因为我不想只过滤掉 None值。

我可以自己实现它,但想知道它是否已经作为功能构造存在。不要介意什么语言,C#、Scala、Haskell 等。

最佳答案

Language-ext 作者在这里,您只需调用 .Sequence() 即可反转内部和外部 monad:

IEnumerable<Option<int>> items = ...;

Option<IEnumerable<int>> result = items.Sequence();

它具有您正在寻找的确切行为,如果序列中的任何项目为 None,则返回 None,否则返回 Some

您还可以使用 .Traverse(...) 随时映射结果。

关于c# - Option<T> 集合的功能转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59020587/

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