我有一个数组(列表?)红宝石:

allRows = ["start","one","two","start","three","four","start","five","six","seven","eight","start","nine","ten"]

我需要对此运行一个循环以获取一个列表,其中列出从“开始”到遇到另一个“开始”的俱乐部元素,如下所示:
listOfRows = [["start","one","two"],["start","three","four"],["start","five","six","seven","eight"],["start","nine","ten"]]

最佳答案

基于来自Rails的Array#split

def group(arr, bookend)
  arr.inject([[]]) do |results, element|
    if (bookend == element)
      results << []
    end
    results.last << element

    results
  end.select { |subarray| subarray.first == bookend } # if the first element wasn't "start", skip everything until the first occurence
end

allRows = ["start","one","two","start","three","four","start","five","six","seven","eight","start","nine","ten"]
listOfRows = group(allRows, "start")
# [["start","one","two"],["start","three","four"],["start","five","six","seven","eight"],["start","nine","ten"]]

10-05 20:32
查看更多