Haskell 将“查找”返回的“Nothing”映射为默认值
假设我有一个类型为[Int,Integer]的列表l,每个元组中的第一个元素是0到n范围内的唯一索引I,每个元组中的第二个元素是关联值v 我想把这个列表扩展成一个长度为10的l'类型[Integer]的列表,这样l!!i==v代表所有i,l和l中的v!!如果j,u不在l中,则j==0 即:[1,10,6,7]=>[0,10,0,0,0,0,7,0,0,0,0] 我不知道怎么做,我试过:Haskell 将“查找”返回的“Nothing”映射为默认值,haskell,Haskell,假设我有一个类型为[Int,Integer]的列表l,每个元组中的第一个元素是0到n范围内的唯一索引I,每个元组中的第二个元素是关联值v 我想把这个列表扩展成一个长度为10的l'类型[Integer]的列表,这样l!!i==v代表所有i,l和l中的v!!如果j,u不在l中,则j==0 即:[1,10,6,7]=>[0,10,0,0,0,0,7,0,0,0,0] 我不知道怎么做,我试过: map (\i -> lookup i l) [0..n] 这是可行的,只是结果是一个可能的列表。一个
map (\i -> lookup i l) [0..n]
这是可行的,只是结果是一个可能的列表。一个显而易见的解决办法是:
integerOrZero :: Maybe Integer -> Integer
integerOrZero Nothing = 0
integerOrZero (Just n) = n
然后:
map integerOrZero $ map (\i -> lookup i l) [0..n]
但我想知道是否有一种更简单的方法——也许是一行程序——用默认值编写这个查找。我想也许在这里不起作用
上下文:我正在尝试生成一个0到n之间的值的柱状图,给出它们的列表,因此总体而言,到目前为止我已经:
import Data.List (group, sort)
hist l = map integerOrZero $ map (\i -> lookup i l') [0..n]
where l' = map (\x -> (head x, length x)) $ group $ sort l
我想用基本包中的函数尽可能简洁地写这篇文章。有数据。Maybe.fromMaybe,它经常被遗忘
如果使用Data.Map.Strict,则有更好的选择。一定是你想要的。那看起来正是我需要的,谢谢。