首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除列表列表中给定元素的匹配项

删除列表列表中给定元素的匹配项
EN

Stack Overflow用户
提问于 2012-05-04 19:27:42
回答 2查看 1.4K关注 0票数 3

我有这个函数,它删除列表列表中某个给定元素的匹配项。

代码语言:javascript
运行
复制
remove          :: Eq a => a -> [[a]] -> [[a]]
remove    y []  = error "Can't remove an element from an empty list"
remove    y xs  = map (filter(/=y)) xs

我怎样才能使用列表理解来做同样的事情呢

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-04 19:37:56

对于xs中的每个l,将filter (/= xs) l添加到结果列表中:

代码语言:javascript
运行
复制
remove y xs = [filter (/= y) l | l <- xs]

或者,通过嵌套理解来删除过滤器。对于xss中的每个xsxs中的每个x,仅当x不同于y时才保留它

代码语言:javascript
运行
复制
remove y xss = [ [x| x <- xs, x /= y] | xs <- xss]

如果您只是在练习,也没问题,但是您的map版本要好得多:)

票数 5
EN

Stack Overflow用户

发布于 2012-05-04 19:32:26

我猜大概是这样的:

代码语言:javascript
运行
复制
 remove y ls = [f|l <- ls, let f = filter (/= y) l]

应该没问题。

它的基本内容是,对于可以在列表ls中创建的每个绑定l,将过滤后的列表f添加到结果列表中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10447924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档