【发布时间】:2021-03-03 16:51:32
【问题描述】:
我正在创建一个聊天应用程序并显示最近提交的 10 条消息。
messages.last(10)
我想在已经显示的 10 条消息之前获取前 15 条消息。
我将如何在 Ruby 中做到这一点?
【问题讨论】:
我正在创建一个聊天应用程序并显示最近提交的 10 条消息。
messages.last(10)
我想在已经显示的 10 条消息之前获取前 15 条消息。
我将如何在 Ruby 中做到这一点?
【问题讨论】:
您可以使用以下方法来做到这一点:
messages[-25..-11]
参见以下irb 示例
为了更好的可读性:
messages = [*0..30] # whatever way to obtain an array of messages
last_messages_amount = 10
previous_messages_amount = 15
previous_messages_range = -(last_messages_amount + previous_messages_amount)..-(last_messages_amount + 1)
previous_messages = messages[previous_messages_range]
【讨论】:
如果切片大小相同(例如,10 条消息),也许您可以将消息转换为枚举器。
messages_enum = messages.lazy.reverse_each.each_slice(10).map(&:reverse)
# Fetch the last 10 messages
p messages_enum.next
# Fetch 10 messages before the last 10 messages
p messages_enum.next
# Fetch 10 messages before the last 20 messages
p messages_enum.next
如果没有更多内容可获取,messages_enum.next 将引发 StopIteration。你可以处理它并告诉客户没有别的了。
【讨论】: