【发布时间】:2014-05-31 08:01:59
【问题描述】:
这对我来说非常棘手。
给定一个很长的列表,
[[100,11,1,0,40,1],[100,12,3,1,22,23],[101,11,1,0,45,1],[101,12 ,3,1,28,30],[102,11,1,0,50,1],[102,12,3,1,50,50],[103,11,1,0,50,1 ],[103,12,3,1,50,50],[104,11,1,0,50,25],[104,12,3,1,50,50],[105,11,1 ,0,50,49],[105,12,3,0,30,30],[106,11,1,0,50,49],[106,12,3,0,25,26], [107,11,1,1,33,20],[107,12,3,0,25,26],[108,11,1,1,2,1],[108,12,3,1 ,20,24],[109,11,1,1,2,1],[109,12,3,1,28,31],[110,11,1,0,40,1],[110 ,12,3,1,22,23]..]
现在忽略每个列表的第一个数字,如果两个列表尽管第一个数字相同,例如
[101,11,1,0,50,1]
alike[102,11,1,0,50,1]
我们保留后一个列表,直到整个列表都被检查完。理想情况下,结果应该是这样的:
[[102,11,1,0,50,1],[103,12,3,1,50,50]..]
我的想法是用map把第一个数字去掉,用nub和\\去掉所有重复的结果,变成like
[[11,1,0,50,1],[12,3,1,50,50],[12,3,1,50,50],[11,1,0,50,49 ],[12,3,0,25,26],[11,1,1,2,1],[11,1,0,40,1],[12,3,1,22,23], [11,1,0,45,1],[12,3,1,28,30]..]
并使用 Set.isSubsetOf 过滤掉原始列表。
但是,这个想法太复杂且难以实施。由于我是 Haskell 的初学者,有没有更好的方法来排序?或者我可以使用递归函数(尽管仍然需要努力)?
【问题讨论】: