0

Is there any easy way to change a [[int]] to [int] or to compare them in this form to find out if there are missing elements.

For example

  set1=   [[1,2,3]] 
  set2= [2,3,]

to return [1]. I tried this:

return s1 s2= [x|x<-s1,y<-s2, x/=y]

Follow up Question: how can I prevent duplicates being returned eg if

set1 = [[1,1,1,2,3]

how can I get the return function to give me only [1]

4

3 回答 3

3

If you have [[1,2,3]] you can just use concat

Prelude> x
[[1,2,3]]
Prelude> concat x
[1,2,3]
Prelude> 

For the second part, I invite you to read this Algorithm - How to delete duplicate elements in a Haskell list

There is a straight forward implementation there.

于 2013-10-07T12:21:48.310 回答
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中不在list2中的项目:

list1 \\ list2

不过要小心,\\如果列表不按顺序排列并且任一列表都包含骗子,则可能无法按预期运行。如果您想了解它在这些情况下的行为,请仔细阅读。

于 2013-10-07T13:00:52.373 回答
0

用于concat转换 from[[a]][a]( nubfrom 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]  
于 2013-10-07T12:55:03.820 回答