【问题标题】:Extract values from a list of maybes从可能列表中提取值
【发布时间】:2019-09-06 14:44:34
【问题描述】:

在 Elm 中,我有一个类似的列表:

[ Just a, Nothing, Just b]

我想从中提取:

[a, b]

使用 List.map 和模式匹配是不允许的,除非我错了,因为当列表中的值为 Nothing 时,我无法返回任何内容。 我怎样才能做到这一点?

【问题讨论】:

    标签: list elm maybe


    【解决方案1】:

    如果您不想要任何额外的依赖项,可以使用 List.filterMapidentity 函数:

    List.filterMap identity [ Just a, Nothing, Just b ]
    

    filterMap 看起来和工作起来很像map,除了映射函数应该返回一个Maybe b 而不仅仅是一个b,并且会打开并过滤掉任何Nothings。因此,使用identity 函数将有效地展开并过滤掉Nothings,而无需实际进行任何映射。

    或者,您可以使用elm-community/maybe-extra 中的Maybe.Extra.values

    Maybe.Extra.values [ Just a, Nothing, Just b ]
    

    【讨论】:

      【解决方案2】:

      通常在这种情况下,我会使用这样的辅助函数:

      extractMbVal =
          List.foldr
              (\mbVal acc ->
                  case mbVal of
                      Just val ->
                          val :: acc
      
                      Nothing ->
                          acc
              )
              []
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多