gpt4 book ai didi

ruby - 查找数组中重复元素的长度

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:28:30 30 4
gpt4 key购买 nike

我想在以下数组中找到条纹的长度:

states = [:read, :read, :read, :unread, :unread, :read, :read, :read, :read]

该数组有 :read:unread,我想要 :read/ 的每条条纹的长度:未读。对于 states,这将变为:

streak_lengths = [3, 3, 3, 2, 2, 4, 4, 4, 4]

数组以三个 :read 元素开始,我们将每个元素标记为 3 连胜的一部分,然后它有两个 :unread 元素,所以它们每个都标有 2 连胜,最后我们有四个读取消息的连胜,所以它们每个都标有 4 >。

什么是解决上述问题的优雅、高效和可读的方法?

这是一个递归问题吗?虽然我可以解决这个问题,但我觉得它暗示了一种我不熟悉的解决方法。它暗示也许递归是解决问题的最佳方法。

(为了应用“可能重复”标志的好处:两个线程的讨论实际上略有不同。此外,从搜索的角度来看,如果您搜索重复的字符,您只会找到另一个线程,这就是答案到如何检测重复的数组元素。最后这里有很多很好的答案,删除这个问题不会使生态系统更丰富,只会更贫穷)

最佳答案

chunk 将连续元素分成数组,当对它们调用 block 时,这些元素具有相同的返回值。 flat_map 将 block 返回的数组连接成一个数组。

states.chunk(&:itself).flat_map{|_, a| Array.new(a.length, a.length)}
# => [3, 3, 3, 2, 2, 4, 4, 4, 4]

如果你愿意,也许你可以用递归的方式来做,但我不认为这会导致一个优雅的解决方案。根据我的经验,最好尽可能避免递归。

关于ruby - 查找数组中重复元素的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35246553/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com