我有一个字符串列表,如下所示:
[ "aaa", "aaa", "aba", "aaa"]
我想创建一个函数,返回列表的第一个位置,其中有一个包含字符'b'的项目。我怎么能在Haskell中做到这一点?
答案 0 :(得分:2)
这是一个可以做你想要的功能:
getIndexWithb = findIndex ('b' `elem`)
您需要导入Data.List
才能使其正常运行。另请注意,对于Maybe Int
永远不会出现在任何字符串中的情况,此函数会返回'b'
类型。
用法:
> getIndexWithb [ "aaa", "aaa", "aba", "aaa"]
Just 2
答案 1 :(得分:2)
The List Utilities chapter of the Haskell Report描述了一个函数findIndex
,它找到满足任意谓词的列表的第一个元素的索引。它可以实现为
findIndex p xs =
case [ i | (x, i) <- zip xs [0..], p x ] of
[] -> Nothing
e:_ -> Just e
通过它,您可以找到包含'b'
和
findIndex ('b'`elem`) ["aaa", "aaa", "aba", "aaa"]
答案 2 :(得分:1)
您要求第一个位置,因此我不清楚您是想要索引值还是实际值。这是一个函数,它为您提供一个包含索引和该索引值的元组。
import Data.Maybe
firstOccurrenceOf :: Char -> [String] -> Maybe (Int, String)
firstOccurrenceOf c list =
listToMaybe $ filter (elem c . snd) $ zip [0..] list
listToMaybe
提供了head
的安全替代方案,它将返回Nothing
而不是在空列表中崩溃。