获取列表元素的当前位置

时间:2013-02-10 22:13:44

标签: haskell

我想知道是否有办法找出列表位置x在函数中的位置?

hep list = [if x=="you" then "u" else if x=="are" then "r" else x | x <- list]

类似的东西:

hep list = [if x=="by" && elemAt(x+1)=="the" && elemAt(x+2)=="way" then "btw" else if x=="are" then "r" else x | x <- list]

3 个答案:

答案 0 :(得分:5)

您可能不希望以这种方式解决您的问题(索引到链接列表是算法气味和所有),但如果您真的需要索引,您可以通过压缩索引列表来获取它们:

zip [0..] some_list

然后,当您遍历此新列表时,您将获得对而不是单个元素。每对的第一个元素将是您想要的索引,第二个元素将是项目。

或者你可能会问你用什么函数去另一个方向(在某个索引处获取元素)?为此,您使用!!

some_list !! 5

答案 1 :(得分:2)

您可以通过使用[0..]压缩给定列表来获取索引,但是按索引访问列表项既不是惯用的也不是执行您想要执行的操作的有效方式。

更好的解决方案是使用递归和模式匹配迭代列表,同时获取多个元素。

答案 2 :(得分:1)

要扩展sepp2k的答案,你可以尝试这样的事情:

hep ("by" : "the" : "way" : rest) = "btw" : hep rest
hep ("are" : rest)                = "r"   : hep rest
hep (yadda : rest)                = yadda : hep rest
hep []                            = []