如何解决似乎无法绕过“列表差异”\\\\\\\\运算符
| 我在Haskell中听说过“列表差异”(\\\\)
运算符一词,但仍然不太了解如何解决这个问题。有什么例子或想法吗?
解决方法
简而言之,它需要两个列表,遍历第二个,对于每个项目,都从第一个列表中删除同一项目的第一个实例。
> [1..10] \\\\ [2,3,5,8]
[1,4,6,7,9,10]
> [1,2,1,2] \\\\ [2]
[1,2]
> [1,2] \\\\ [2,2]
[1,1]
[1,2]
, (\\\\)
运算符(和difference
函数)实现了设置差异,因此,如果有两个列表a
和b
,它仅返回a
中不在b
中的那些元素,如图所示:
, xs \\\\ ys
是ѭ9in中所有不在ys
中的元素。也许列表理解会澄清这一点:
xs \\\\ ys = [ x | x <- xs,x `notElem` ys ]
或者,如果您可以在Haskell中这样做,
xs \\\\ ys = [ x | x `elem` xs,x `notElem` ys ]
这来自集合论的集合差异。基本思想是您要从另一个元素中“减去”一个元素集合,因此是“差异”一词。
, 假设您有一个事物列表,例如城市。让我们以这个列表为例:
a = [\"London\",\"Brussels\",\"Tokio\",\"Los Angeles\",\"Berlin\",\"Beijing\"]
现在,您要删除欧洲的所有城市。你知道,那些城市在欧洲:
b = [\"Glasgow\",\"Paris\",\"Bern\",\"London\",\"Madrid\",\"Amsterdam\",\"Brussels\"]
要获取a
中不在欧洲,不在b
中的城市的列表,可以使用(\\\\)
:
a \\\\ b = [\"Tokio\",\"Beijing\"]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。