满足错误条件时退出Ruby delete_if

时间:2018-04-12 21:00:30

标签: arrays ruby hash

我有以下代码行,它存储反向时间顺序时间戳列表,并通过比较存储的时间戳和Time.now - 5.minutes之间的间隔(要比较的“过期”时间戳)来删除过时的时间戳。

@@timestamp[@name].delete_if { |ts| ts <= Time.now - 5.minutes }

使用以下命令将时间戳添加到此哈希:

@@timestamp[@name] << Time.now

所以我的问题是,delete_if在我的情况下是计算密集型的,因为@@timestamp只是时间戳的反向时间顺序列表,所以如果让我说我有一个时间戳列表,如:

{expired, expired, expired, not-expired, not-expired, not-expired}

我希望delete_if在到达第一个not-expired时退出,这意味着,当ts <= Time.now - 5.minutes返回false

1 个答案:

答案 0 :(得分:2)

@@timestamp[@name].drop_while { |ts| ts <= Time.now - 5.minutes }

请参阅:https://apidock.com/ruby/Array/drop_while

  

删除元素,但不包括块返回nilfalse的第一个元素,并返回包含其余元素的数组。

还有Array#take_while,以防您需要反转逻辑。