我有這樣一個字符串列表如下:哈斯克爾 - 獲取第一次出現的指數字符串列表
[ "aaa", "aaa", "aba", "aaa"]
我想讓它返回列表的第一個位置的功能那裏是包含字符'b'的項目。我如何在Haskell中做到這一點?
我有這樣一個字符串列表如下:哈斯克爾 - 獲取第一次出現的指數字符串列表
[ "aaa", "aaa", "aba", "aaa"]
我想讓它返回列表的第一個位置的功能那裏是包含字符'b'的項目。我如何在Haskell中做到這一點?
這裏是一個會做你想要什麼功能:
getIndexWithb = findIndex ('b' `elem`)
您需要導入Data.List
,使這項工作。還請注意,對於'b'
從不出現在任何字符串中的情況,此函數返回類型Maybe Int
。
用法:
> getIndexWithb [ "aaa", "aaa", "aba", "aaa"]
Just 2
您要求的第一個職位所以我不清楚您是否需要索引值或實際值。這是一個函數,它爲您提供一個包含索引和該索引值的元組。
import Data.Maybe
firstOccurrenceOf :: Char -> [String] -> Maybe (Int, String)
firstOccurrenceOf c list =
listToMaybe $ filter (elem c . snd) $ zip [0..] list
listToMaybe
提供了一種安全的替代head
將返回Nothing
,而不是崩潰對空列表。
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"]
什麼一直是你的方法,到目前爲止列表的第一個元素?你能寫一個函數來測試一個字符是否出現在字符串中嗎?例如,'contains'aba''b''會返回'True'。 – bheklilr
@bheklilr就我所見,這個函數已被棄用。相反,可以使用isInfixOf,在這種情況下'isInfixOf「b」「aba」'將返回'True' – molinet
我實際上並不知道已經有一個'contains'函數,我打算讓你自己寫= P I假設這是一項任務,它應該可以幫助你教你如何在鏈表上進行遞歸,在這種情況下,你應該儘可能地實現儘可能多的學習。 – bheklilr