Haskell地图和过滤器

时间:2012-02-13 12:09:30

标签: function haskell map filter

以下是我的问题:我有两个列表如下:[(Float, Integer)][(String, Integer)]。现在我需要定义一个函数,它接受这两个列表和两个Float值并返回Strings列表。两个Float值对应于给定的范围(min和max)。我必须过滤第一个列表,因此它只包含在最小和最大范围内的元素。然后,我需要使用过滤后的列表并获取Integer值,将其与第二个列表中的Integer值匹配,并返回匹配的所有String值。

我已经定义了一个函数用作过滤条件,它接受(Float,Integer)并检查Float值以查看它是否在给定范围内。

我已经定义了一个函数来获取(String,Integer)元素并返回String

我只是将所有事情联系在一起,或者我错过了一些东西!

1 个答案:

答案 0 :(得分:3)

您需要(例如,有不同的方式)

integersFromRange :: Float -> Float -> [(Float,Integer)] -> [Integer]
stringsFromInteger :: Integer -> [(String,Integer)] -> [String]

integersFromRange基本上是map snd . filter conditioncondition来自两个Float(你有)。 stringsFromInteger可以map fst . filter condition实施。然后将功能与

组合在一起
result = concatMap (`stringsFromInteger` stringList) (integerFromRange mini maxi floatList)

使用一组Integer而不是列表会更有效率,因为Set中的成员资格测试比列表中的更快。