我有以下代码行,它存储反向时间顺序时间戳列表,并通过比较存储的时间戳和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
时
答案 0 :(得分:2)
@@timestamp[@name].drop_while { |ts| ts <= Time.now - 5.minutes }
请参阅:https://apidock.com/ruby/Array/drop_while:
删除元素,但不包括块返回
nil
或false
的第一个元素,并返回包含其余元素的数组。
还有Array#take_while
,以防您需要反转逻辑。