当前位置:  开发笔记 > 前端 > 正文

获取Haskell中字符串列表中元素的位置

如何解决《获取Haskell中字符串列表中元素的位置》经验,为你挑选了1个好方法。

我的头衔可能有点偏,我会试着更好地解释一下我想要实现的目标.

基本上我要说我有一个清单:

["1234x4","253x4",2839",2845"]

现在我想将包含元素5的字符串的所有位置添加到新列表中.在当前示例中,结果列表将是:

[1,3]

为此我已经完成了类似的功能elem:

myElem [] _ = False
myElem [x] number =
  if (firstCheck x) then if digitToInt(x) == number then True else False else False
myElem (x:xs) number =
if (firstCheck x) then (if digitToInt(x) == number then True else myElem xs number) else myElem xs number

其中firstCheck x检查该检查元素不是"X"或"#"

现在,在我当前的函数中,我获得了包含元素的第一个元素位置,但是我的头部仍然在如何获取完整列表:

findBlock (x:xs) number arv =
  if myElem x number then arv else findBlock xs number arv+1

哪里arv是0,number是我正在寻找的号码.

例如输入:

findBlock ["1234x4","253x4",2839",2845"] 5 0 

结果将是1

任何帮助,将不胜感激.



1> Sebastian Re..:

您想要的功能已存在于Data.List模块中,名称为findIndices.您可以简单地(elem '5')用作谓词.

http://hackage.haskell.org/package/base-4.8.1.0/docs/Data-List.html#v:findIndices

如果,由于某种原因,你不允许使用内置的,它带有一个非常漂亮的定义(虽然实际使用的那个有一个更复杂,更有效的一个):

findIndices p xs = [ i | (x,i) <- zip xs [0..], p x]

顺便说一句,我通过搜索Hoogle的类型找到了这个函数[a] -> (a -> Bool) -> [Int],其中(模数参数排序)显然是函数必须具有的类型.找出Haskell的最佳方法是考虑它需要的类型并搜索Hoogle或Hayoo的类型.Hoogle是更好的IMO,因为它在类型上略有模糊匹配; 例如,Hayoo不会通过我给出的类型在这里找到函数,因为它以相反的顺序获取参数.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有