如何删除数组中重复的连续元素?

黑猫

给定一个数组,例如

arr = [1,1,1,2,2,3,4,1,2]

我希望用该元素的单个实例替换每个连续的相等元素字符串。这里的结果是

[1,2,3,4,1,2]

三个1s 由单个替换,1两个2s 由单个替换2

我怎样才能为任意的 Ruby 对象数组做到这一点?

塞巴斯蒂安帕尔马占位符图像

我知道你可以用chunk_whileand做到这一点map,但可能还有其他方法:

[1,1,1,2,2,3,4,1,2].chunk_while { |e, f| e == f }.map(&:first)
# [1, 2, 3, 4, 1, 2]

随着chunk_while拆分的块阵列每当块被评估为真,则该块收益率两个变量中,“之前元素”和“后元”,这就是说,你会得到这样每次迭代:

[1, 1]
[1, 1]
[1, 2]
[2, 2]
[2, 3]
[3, 4]
[4, 1]
[1, 2]

在 proc 中应用逻辑后,只要第一个和第二个产生的元素相等,它就会对接收器进行分块,你会得到:

[[1, 1, 1], [2, 2], [3], [4], [1], [2]]

之后,您可以映射该结果以仅从每个数组中获取一个元素 - 有很多方法,但first已经足够了。

chunk_whilePROC也可以缩短到(&:==),留下的[1,1,1,2,2,3,4,1,2].chunk_while(&:==).map(&:first)

同样,出于好奇,您可以使用slice_whenlast来保存 2 个字符:[1,1,1,2,2,3,4,1,2].slice_when(&:!=).map(&:last).

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章