【发布时间】:2013-05-04 01:09:43
【问题描述】:
我一直在努力解决这个问题,但似乎我缺乏 Haskell 经验无法让我通过它。我在 Stackoverflow 上找不到类似的问题(其中大多数与合并所有子列表有关,没有任何条件)
就这样吧。假设我有一个这样的列表:
[[1, 2, 3], [3, 5, 6], [20, 21, 22]]
如果某种条件为真,是否有一种有效的方法来合并列表?假设我需要合并至少共享一个元素的列表。例如,结果将是:
[[1, 2, 3, 3, 5, 6], [20, 21, 22]]
另一个例子(当所有列表都可以合并时):
[[1, 2], [2, 3], [3, 4]]
结果如下:
[[1, 2, 2, 3, 3, 4]]
感谢您的帮助!
【问题讨论】:
-
可以合并任意两个列表,还是只合并连续的列表?
-
@hammar 忘了提。任意两个列表。
-
一个疯狂的猜测:这听起来像是你在实现某种不相交的联合数据结构。列表不是表示这一点的好方法。你能告诉我们你在这里想要达到什么目标吗?
-
@NiklasB 提供的示例几乎就是我想要做的——没有特别的用途。我会确保对脱节联合进行一些研究。所以我想列表没有半体面的方法吗?
-
如果您绝对必须使用列表,一般方法是获取第一个列表,遍历列表,为每个列表附加一个公共元素并重复直到不再添加列表(因为您可能有
[[1,2],[3,4],[1,4]],其中第一遍并不能拾取所有东西)。递归未与第一个加入的子列表。但我会寻找更好的数据结构...
标签: haskell