从嵌套列表中过滤元素

时间:2017-05-16 16:00:58

标签: list haskell filter

我很难理解函数式编程背后的逻辑。所以,这应该是一件非常简单但不适合我的事情。 我想做的是: 带参数列表的函数和列表如下所示:{"name":"something","id":"12sde"}Error occured while trying to proxy to: localhost:4200/api/v1/login 首先我应删除小于6的值,然后删除少于2个元素的所有列表。我的代码是这样的:

[[1,2,3], [5,7,8,12,34], [2,4,6,8]]

4 个答案:

答案 0 :(得分:1)

你正好相反,检查一下:

SQLiteOpenHelper

答案 1 :(得分:1)

这是一个品味问题,但是,为了便于阅读,您可能想要使用中间体:

f11 :: [[Int]] -> [[Int]]
f11 xs = 
    let 
        less6Cleared = map (filter (\x -> x >= 6)) xs
    in  
        filter (\x -> length(x) >= 2) less6Cleared                       

这表示less6Cleared是清除了所有元素少于6的列表列表。现在,我们将过滤器应用于less6Cleared

答案 2 :(得分:1)

您还可以使用do表示法,这要归功于列表' Monad的实例。

f11 xss = do
    xs <- xss
    let ys = [x | x <- xs, x >= 6]
    guard (length ys <= 2)
    return ys
列表

do表示法基本上表示foreach循环。我们从xs中提取每个元素xss,然后通过列表推导提供它,以过滤掉小于6的元素,命名结果ys。然后guard过滤掉ys超过2的时间。

答案 3 :(得分:0)

如果你想用无点样式和部分功能应用程序疯狂......

f11 :: [[Int]] -> [[Int]]
f11 = (filter $ (>= 2) . length) . (map $ filter (>= 6))

......但它可能不会更清楚,特别是那些不习惯它的人。

我也满足了你的要求&#34;少于&#34;要严格,所以不删除6的值,不删除长度为2的列表。