过滤元组列表
答
在Haskell中,不能像遍历列表一样遍历一个元组。
如果该元组只有两个项目,则可以使用fst
检索元组的第一个项目并使用snd
检索第二个项目。做什么,我觉得你想要做
一种方法是这样的方法:
Prelude> let lst = [(1,2), (3,4)]
Prelude> filter ((==1).fst) lst
[(1,2)]
其中仅将列表中的第一个元素等于1项;当然,您也可以替换x
这里我把1
要成为一个更具体一点,(==1).fst
首先应用fst
在善堂的元素,然后应用到(==1)
的fst
结果 - 技术上,点组成这两个功能在一起。
答
您不能在其中通配符_
与==
运算符(或任何其他函数)发生争执。争论必须是一种真正的价值,而不是一种应该与之相匹配的模式。
如果你想使用模式匹配,你可以使用lambda函数,你filter
条件:
filter (\(a,_) -> a == x) lis
此外,还有预定义功能fst
提取两个元素的元组的第一个元素。这可以结合==
做相同的测试:
filter ((== x) . fst)) lis
这很好,谢谢。想知道那些。在所有示例代码中做了些什么! – Zippy 2009-10-24 16:59:12
我认为'''和'$'之间的用法(和区别)是开始Haskell最常见的障碍之一 - 所以不用担心,你不是唯一遇到麻烦的人! – 2009-10-24 17:05:15