从可能列表中提取值
Extract values from a list of maybes
在 Elm 中,我有一个列表:
[ Just a, Nothing, Just b]
我想从中提取:
[a, b]
使用 List.map 和模式匹配不允许这样做,除非我错了,因为当列表中的值为 Nothing 时我不能 return nothing。
我怎样才能做到这一点?
如果你不想要任何额外的依赖,你可以使用List.filterMap
with the identity
函数:
List.filterMap identity [ Just a, Nothing, Just b ]
filterMap
看起来和工作起来很像 map
,除了映射函数应该 return 一个 Maybe b
而不仅仅是一个 b
,并且将展开并过滤掉任何 Nothing
s。因此,使用 identity
函数将有效地解包并过滤掉 Nothing
,而无需实际进行任何映射。
或者,您可以使用 Maybe.Extra.values
from elm-community/maybe-extra:
Maybe.Extra.values [ Just a, Nothing, Just b ]
通常在这种情况下,我会使用像这样的辅助函数:
extractMbVal =
List.foldr
(\mbVal acc ->
case mbVal of
Just val ->
val :: acc
Nothing ->
acc
)
[]
在 Elm 中,我有一个列表:
[ Just a, Nothing, Just b]
我想从中提取:
[a, b]
使用 List.map 和模式匹配不允许这样做,除非我错了,因为当列表中的值为 Nothing 时我不能 return nothing。 我怎样才能做到这一点?
如果你不想要任何额外的依赖,你可以使用List.filterMap
with the identity
函数:
List.filterMap identity [ Just a, Nothing, Just b ]
filterMap
看起来和工作起来很像 map
,除了映射函数应该 return 一个 Maybe b
而不仅仅是一个 b
,并且将展开并过滤掉任何 Nothing
s。因此,使用 identity
函数将有效地解包并过滤掉 Nothing
,而无需实际进行任何映射。
或者,您可以使用 Maybe.Extra.values
from elm-community/maybe-extra:
Maybe.Extra.values [ Just a, Nothing, Just b ]
通常在这种情况下,我会使用像这样的辅助函数:
extractMbVal =
List.foldr
(\mbVal acc ->
case mbVal of
Just val ->
val :: acc
Nothing ->
acc
)
[]