List 过滤[a]并不丢弃任何值
对于一个List 过滤[a]并不丢弃任何值,list,haskell,filter,map-function,maybe,List,Haskell,Filter,Map Function,Maybe,对于一个列表,可能是一个,如何筛选并仅获取列表中非无的元素 ——输入 pas=[只有3,只有1,只有5,只有9,没有,只有10,没有]:[可能是Int] --预期产量 新的_pas=[3,1,5,9,10] 我尝试了使用map的不同方法,并查看了mappaye,但找不到正确的组合。在键入问题时,我找到了答案,实际上很简单: new|pas=[pa | Just pa以及您发现的简单列表理解,已经有一个用于此的库函数: 请注意,您不仅可以搜索Hoogle的名称,还可以搜索类型签名,这在许多情况下
列表,可能是一个,如何筛选并仅获取列表中非无的元素
——输入
pas=[只有3,只有1,只有5,只有9,没有,只有10,没有]:[可能是Int]
--预期产量
新的_pas=[3,1,5,9,10]
我尝试了使用map
的不同方法,并查看了mappaye
,但找不到正确的组合。在键入问题时,我找到了答案,实际上很简单:
new|pas=[pa | Just pa以及您发现的简单列表理解,已经有一个用于此的库函数:
请注意,您不仅可以搜索Hoogle的名称,还可以搜索类型签名,这在许多情况下都非常有用。在这里输入[maybea]->[a]
可以立即为您提供catMaybes
。(坦白:我忘记了函数的名称,但知道它存在,刚才就是这样发现的!)很不错。但是,我也喜欢你提到的方法(注意,这只是在中提到的一行)可以在这里使用:
unwrapJusts::[a]->[a]
unwrapJusts=mapID
你的例子是:
GHCi> unwrapJusts [Just 3, Just 1, Just 5, Just 9, Nothing, Just 10, Nothing]
[3,1,5,9,10]
这个想法相当简单:当遍历列表时,map可能id
抛出所有Nothing
s(即id Nothing
s),并将仅x
s变成x
s。map
本身无法过滤。concat.map(\case Nothing->[];Just x->[x])
会过滤。(当然,你的列表理解答案显示用LCs写的更好)。