有没有简单的方法来浏览列表? 假设我想访问列表中的第5个数据而不知道它是B
["A","A","A","A","B","A","A","A","A"]
有没有办法可以做到这一点,而无需对列表进行排序?
答案 0 :(得分:4)
我不太了解米兰达,但我希望功能skip
和take
可用。
你可以通过跳过一个函数来解决第五个元素。如果没有跳过和拍摄,很容易自己创建它们。
跳过:跳过列表中的y个元素,当y大于列表中的项目数时,它将返回一个空列表
take:获取列表中前y个元素,当y大于列表中的项目数时,将返回完整列表。
skip y [] = []
skip 0 xs = xs
skip y (x:xs) = skip xs (y-1)
take y [] = []
take 0 xs = []
take y (x:xs) = x : take (y-1) xs
elementAt x xs = take 1 (skip x xs)
答案 1 :(得分:2)
列表是归纳数据类型。这意味着在列表上定义的函数 - 例如,访问 nth 元素 - 由递归定义。您正在寻找的数据结构似乎是一个数组,允许持续时间查找。在列表中的索引处查找元素的最简单方法是直接:
lookup :: Int -> [a] -> Maybe [a]
lookup n [] = Nothing
lookup 0 (x:xs) = Just x
lookup n (x:xs) = lookup (n - 1) xs
答案 2 :(得分:2)
另一种方法是使用!运营商。假设您有一个包含列表中已定义数据的程序,例如:
plist = [A,A,A,A,B,A,A,A,A]
然后执行plist!4
将为您提供该列表的第5个元素。 (如果你包括0,1,2,3,4,则4为第5单位)
所以plist!4
返回B.