首页 > 解决方案 > 哈斯克尔。需要按照它们遵循的顺序展平列表中的相同元素

问题描述

如何删除与列表中项目相邻的相同重复项目?

flattlst "aaaasssaaabbbssaaa"
--"asabsa"

我试图通过Data.List中的“nub”函数来做到这一点,

 import Data.List
 flattlst = nub
 --flattlst"aaaasssaaabbbssaaa"
"asb" -- !!! It is wrong!!
"asabsa" -- !!The answer should be like this.

但这不是我需要的。“小块”删除了所有相同的元素,但我只需要那些连续的。帮我解决这个问题。

标签: haskell

解决方案


这是一种天真的方法,应该可以正常工作。它使用来自的Data.List

flattlst = map head . group

大多数 Haskell 程序员,包括我在内,通常都会警告不要使用head,因为如果在空列表上使用它会使程序崩溃。但是,group保证会产生一个非空列表的列表*,所以这应该没问题。

*至少如果输入非空。我不确定group在空列表上使用时会发生什么 - 我怀疑这会以一种或另一种方式爆炸,因此如果需要避免这一点,请为空列表/字符串添加一个特殊情况。


推荐阅读