gpt4 book ai didi

ruby-on-rails - 如何返回数组中可能存在的一组序号?

转载 作者:数据小太阳 更新时间:2023-10-29 08:16:05 25 4
gpt4 key购买 nike

如果我有一个排序数组,我如何找到序号?顺便说一句,这是为了确定一手扑克牌是否顺子。数组中的重复项已被删除。我可以做到这一点,但这将是一种多行方法,我认为可能有一个使用 Enumerable 方法的快速单行方法。

例如:

FindSequence([9,8,7,5,4]) = [9,8,7]
FindSequence([4,2,0]) = nil

最佳答案

在 1.9.2 中,一个神秘的 slice_before方法被添加到 Enumerable 中。你可以利用它:

def find_sequences_desc(a)
prev = a[0]
a.slice_before { |cur|
prev, prev2 = cur, prev # one step further
prev2 - 1 != prev # two ago != one ago ? --> new slice
}.to_a
end
# find_sequences_desc [9,8,7,4,4] #=> [[9, 8, 7], [4], [4]]
# find_sequences_desc [9,8,7,5,4] #=> [[9, 8, 7], [5, 4]]

def find_sequences_asc(a)
prev = a[0]
a.slice_before { |cur|
prev, prev2 = cur, prev # one step further
prev2 + 1 != prev # two ago != one ago ? --> new slice
}.to_a
end
# find_sequences_asc [1,2,4,5,7] #=> [[1, 2], [4,5], [7]]
# find_sequences_asc [1,2,3,5,6] #=> [[1, 2, 3], [5, 6]]

你可以得到你需要的语义

def find_longest_sequence(a)
s = find_sequences_desc(a).max
s unless s.size <= 1
end

更新

Ruby 2.2 添加了一个 slice_when方法,大大简化了代码:

def find_sequences_desc(a)
a.slice_when { |prev, cur|
cur != prev - 1
}.to_a
end
# find_sequences_desc [9,8,7,4,4] #=> [[9, 8, 7], [4], [4]]
# find_sequences_desc [9,8,7,5,4] #=> [[9, 8, 7], [5, 4]]

关于ruby-on-rails - 如何返回数组中可能存在的一组序号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6258971/

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