List String 此功能应删除所有 Nothing出现在给定数组中,并将其-6ren">
gpt4 book ai didi

elm - 如何从 Elm Array 中过滤掉 "Nothing"值?

转载 作者:行者123 更新时间:2023-12-04 00:09:40 25 4
gpt4 key购买 nike

我想定义以下函数:

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。过滤器映射采用一个生成可能的函数,并将其应用于列表中的每个元素,丢弃 Nothing案件。我们只是应用恒等函数,它丢弃了 Nothing已经存在的值。

一般来说,数组适合快速随机访问,但如果您多次遍历整个集合,列表往往会更快。但是,始终以清晰的方式开始,然后根据需要进行优化。

关于elm - 如何从 Elm Array 中过滤掉 "Nothing"值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33093359/

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