要选择列表的第 k 个元素,只需使用!!
. 第一个元素是索引0
selectN = (!!)
ghci> let test = "abracadabra"
ghci> test !! 0
ghci> 'a'
ghci> test !! 9
ghci> 'r'
但要小心indexOutOfRange
异常
ghci> test !! 11
*** Exception: Prelude.(!!): index too large
版本:使功能安全
可以编写一个safeSelectN
来处理错误异常并允许程序安全地继续运行而无需任何IO
操作。为此,需要进行以下修改
safeSelectN :: Int -> [a] -> [a]
safeSelectN n xs = if null xs || length xs < n then [] else [xs !! n]
在这种情况下,将通过接收一个空列表作为结果来检测错误。
ghci> safeSelectN 3 ""
[]
ghci> safeSelectN 0 ""
[]
ghci> safeSelectN 3 "abcd" --like this
['d']
因此,当结果正确时,您将不会只得到第 k 个元素,而是得到一个仅包含第 k 个元素的列表。