Haskell - 获取字符串列表中第一次出现的索引

时间:2016-04-04 15:17:18

标签: string list haskell find character

我有一个字符串列表,如下所示:

[ "aaa", "aaa", "aba", "aaa"]

我想创建一个函数,返回列表的第一个位置,其中有一个包含字符'b'的项目。我怎么能在Haskell中做到这一点?

3 个答案:

答案 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而不是在空列表中崩溃。