Haskell在筛选列表的列表时访问子列表
我是Haskell的新手,尝试实现以下目标:Haskell在筛选列表的列表时访问子列表,haskell,Haskell,我是Haskell的新手,尝试实现以下目标: filter (((!!) subList (fromJust (elemIndex String [String]))) == String) [[string]] 我用它们的类型替换了名称,以便于阅读。问题是我不能使用子列表,但是(!!)使用列表作为参数。那么我该怎么写呢 编辑: 我分别编写了过滤条件,虽然有效,但问题仍然是一样的: findGood :: [String] -> String -> [String] -> S
filter (((!!) subList (fromJust (elemIndex String [String]))) == String) [[string]]
我用它们的类型替换了名称,以便于阅读。问题是我不能使用子列表,但是(!!)使用列表作为参数。那么我该怎么写呢
编辑:
我分别编写了过滤条件,虽然有效,但问题仍然是一样的:
findGood :: [String] -> String -> [String] -> String -> Bool
但是我仍然需要填写所有的值,尽管第一个[String]是子列表。可以输入所有其他值
编辑:
我解决了它,我需要做的是把[String]放在最后,然后我可以把它留在过滤器中
所以
这就是我想要的。(不需要D)考虑到您想要比较货币并检查
money>500
,将其存储为Int
而不是字符串更为合理。此外,我要说的是,将每个条目存储为元组并拥有元组列表比使用列表列表更有意义(这也是money的Int实现所必需的,因为您不能拥有不同类型列表的列表)
因此,表的类型应该是[(String,Int)]
filter
遍历列表并根据条件检查每个元素。在这种情况下,条件是如此简单,我不会费心让它成为自己的函数(除非你需要在很多地方重用它)
当给定一对类型(String,Int)
时,我们只想检查第二个值是否大于500。因此,条件就是snd row>500
,其中row是表示表中一行的元组
这就给我们留下了:
filter(\row->snd row>500)表
在[(“Geoff”,600),(“Bill”,700),(“Bill Jr.”,10)]上进行测试。
这会使[(“Geoff,600),(“Bill”,700)]
达到预期效果。我的猜测是,如果您取出要过滤的函数并单独编写,这将变得更容易。但是,如果你给我们一些输入和输出的例子,你会更容易理解你在做什么。如果你能用文字解释一下你在这里试图做什么,那会很有帮助。请不要发布一些无效的代码片段,先解释一下你的目标是什么。你想用这个过滤器解决什么问题?
?我有一个表,它是字符串列表的列表。表的顶部有名称。例如,我只想显示money大于500的所有行,代码会搜索money在最上面列表中的位置,然后检查每一行上的值是否大于500,如果不大于500,则不显示该行,因此对于每个“子列表”,我想检查某个索引上的一个单词是否等于另一个单词,但是为了检查我需要子列表谢谢,对于所描述的场景它确实可以工作,但是我需要一个更抽象问题的解决方案。具体说明我在第二次编辑中所做的。@BaasBartMans不客气,下次如果您在问题中描述抽象问题,可能会有所帮助。如果他们不知道问题出在哪里,没有人能帮助你。
findGood :: String -> [String] -> String -> [String] -> Bool
filter (findGood a b c) [[String]]