如何从 Elm 数组中过滤掉 "Nothing" 值?
How to filter out "Nothing" values from Elm Array?
我想定义以下函数:
compactAndConvertToList : Array (Maybe String) -> List String
此函数应删除给定数组中所有 Nothing
的出现,并将其转换为 List
。
我想到了下面的解决方案,但感觉有点脏。
有没有更好的方法来实现这个?
import Graphics.Element exposing (..)
import Array
model : Array.Array (Maybe String)
model = Array.fromList [ Just "Hello", Just "Stack", Nothing, Just "Overflow" ]
compactAndConvertToList : Array.Array (Maybe String) -> List String
compactAndConvertToList maybeStrings =
maybeStrings
|> Array.filter (\x -> x /= Nothing)
|> Array.map (Maybe.withDefault "")
|> Array.toList
main =
model
|> compactAndConvertToList
|> show
如果您的最终结果是一个列表,您最好将数组转换为列表,然后对其进行操作。
import Array
compactAndConvertToList : Array.Array (Maybe String) -> List String
compactAndConvertToList = Array.toList >> List.filterMap identity
如果你不习惯高阶函数,你可以这样写:
compactAndConvertToList arr = List.filterMap identity (Array.toList arr)
我们获取我们的数组,将 toList 应用于它,然后将 filterMap 应用于它。 Filter map 采用一个函数生成一个 maybe,并将其应用于列表中的每个元素,丢弃 Nothing
情况。我们只是应用恒等函数,它会丢弃已经存在的 Nothing
值。
一般来说,数组有利于快速随机访问,但如果您多次遍历整个集合,列表往往会更快。但是,始终以清晰的方式开始,然后在需要时进行优化。
也许这是 2018 年更好的答案。使用 elm-community/maybe-extra 包。
示例:
Maybe.Extra.values [Just 1, Nothing, Just 3]
Returns:
[1,3]
我想定义以下函数:
compactAndConvertToList : Array (Maybe String) -> List String
此函数应删除给定数组中所有 Nothing
的出现,并将其转换为 List
。
我想到了下面的解决方案,但感觉有点脏。
有没有更好的方法来实现这个?
import Graphics.Element exposing (..)
import Array
model : Array.Array (Maybe String)
model = Array.fromList [ Just "Hello", Just "Stack", Nothing, Just "Overflow" ]
compactAndConvertToList : Array.Array (Maybe String) -> List String
compactAndConvertToList maybeStrings =
maybeStrings
|> Array.filter (\x -> x /= Nothing)
|> Array.map (Maybe.withDefault "")
|> Array.toList
main =
model
|> compactAndConvertToList
|> show
如果您的最终结果是一个列表,您最好将数组转换为列表,然后对其进行操作。
import Array
compactAndConvertToList : Array.Array (Maybe String) -> List String
compactAndConvertToList = Array.toList >> List.filterMap identity
如果你不习惯高阶函数,你可以这样写:
compactAndConvertToList arr = List.filterMap identity (Array.toList arr)
我们获取我们的数组,将 toList 应用于它,然后将 filterMap 应用于它。 Filter map 采用一个函数生成一个 maybe,并将其应用于列表中的每个元素,丢弃 Nothing
情况。我们只是应用恒等函数,它会丢弃已经存在的 Nothing
值。
一般来说,数组有利于快速随机访问,但如果您多次遍历整个集合,列表往往会更快。但是,始终以清晰的方式开始,然后在需要时进行优化。
也许这是 2018 年更好的答案。使用 elm-community/maybe-extra 包。
示例:
Maybe.Extra.values [Just 1, Nothing, Just 3]
Returns:
[1,3]