【问题标题】:How would I get the previous array items before X?如何在 X 之前获取先前的数组项?
【发布时间】:2021-03-03 16:51:32
【问题描述】:

我正在创建一个聊天应用程序并显示最近提交的 10 条消息。

messages.last(10)

我想在已经显示的 10 条消息之前获取前 15 条消息。

我将如何在 Ruby 中做到这一点?

【问题讨论】:

    标签: arrays ruby


    【解决方案1】:

    您可以使用以下方法来做到这一点:

    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]
    

    【讨论】:

      【解决方案2】:

      如果切片大小相同(例如,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。你可以处理它并告诉客户没有别的了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-13
        • 2021-09-26
        • 1970-01-01
        相关资源
        最近更新 更多