haskell - 哈斯克尔。需要按照它们遵循的顺序展平列表中的相同元素
问题描述
如何删除与列表中项目相邻的相同重复项目?
flattlst "aaaasssaaabbbssaaa"
--"asabsa"
我试图通过Data.List中的“nub”函数来做到这一点,
import Data.List
flattlst = nub
--flattlst"aaaasssaaabbbssaaa"
"asb" -- !!! It is wrong!!
"asabsa" -- !!The answer should be like this.
但这不是我需要的。“小块”删除了所有相同的元素,但我只需要那些连续的。帮我解决这个问题。
解决方案
这是一种天真的方法,应该可以正常工作。它使用来自的组Data.List
:
flattlst = map head . group
大多数 Haskell 程序员,包括我在内,通常都会警告不要使用head
,因为如果在空列表上使用它会使程序崩溃。但是,group
保证会产生一个非空列表的列表*,所以这应该没问题。
*至少如果输入非空。我不确定group
在空列表上使用时会发生什么 - 我怀疑这会以一种或另一种方式爆炸,因此如果需要避免这一点,请为空列表/字符串添加一个特殊情况。
推荐阅读
- c# - .net 应用程序基本身份验证
- c - 在不同的函数中使用 C 全局变量时被截断
- excel - 转换 Excel 函数或 VBA 以在 Word 宏中使用
- python - TypeError:'WindowsPath' 类型的参数不可迭代 - 在 django python 中
- speech-recognition - 适用于 3 名以上参与者的演讲者分类工具
- html - CSS:表格边框属性被覆盖
- angular - agGrid - 在现有行之外单击时检测
- python - 我如何理解 numpy.sin() 结果?
- excel - 对象工作表的 VBA 范围失败
- flutter - 上面有图片,下面有文字的卡片