有没有简单的方法可以将[[int]]更改为[int]或者在此表单中比较它们,以确定是否缺少元素。
例如
set1= [[1,2,3]]
set2= [2,3,]
返回[1]。我试过这个:
return s1 s2= [x|x<-s1,y<-s2, x/=y]
跟进问题: 如何防止返回重复项 例如,如果
set1 = [[1,1,1,2,3]
如何才能让return函数只给[1]
答案 0 :(得分:3)
如果你有[[1,2,3]],你可以使用concat
Prelude> x
[[1,2,3]]
Prelude> concat x
[1,2,3]
Prelude>
对于第二部分,我邀请您阅读此Algorithm - How to delete duplicate elements in a Haskell list
那里有一个直接的实施。
答案 1 :(得分:1)
这里似乎有三个截然不同的问题。
第一个问题,如何将列表的列表转换为列表?
concat [[1,1,2],[2,1,3]] == [1,1,2,2,1,3]
第二个问题,如何从列表中删除重复项?您可以使用nub(请记住import Data.List
):
nub [1,2,1,3] == [1,2,3]
也许您只想删除连续重复项?例如,如果您知道您已经对列表进行了排序:
map head (group [1,1,1,2,3]) == [1,2,3]
在那里,group
会将它们分组为连续重复的列表,然后head
仅用于返回每组重复项中的第一个。
第三个问题,如何在list1中找到不的list1中的项目:
但请注意,如果列表不在列表中并且任一列表包含dupes,\\
可能无法按预期运行。如果你想了解它在这些情况下的行为,请仔细阅读。
答案 2 :(得分:0)
使用concat
从[[a]]
转换为[a]
和nub
(从Data.List
转换)以从列表中删除重复的元素。
ghci中的演示:
> import Data.List (nub)
> let set1 = [[1,2,3]]
> let set2 = [2,3]
> concat set1 == set2
False
> let set1 = [[1,1,1,2,3]]
> nub (concat set1)
[1,2,3]