Arrays 一次迭代n个项目,然后继续迭代

Arrays 一次迭代n个项目,然后继续迭代,arrays,ruby,loops,Arrays,Ruby,Loops,我正在尝试构建一个CLI。我想打印数组中存储的每个对象的名称。这就是我的阵列的外观: my_arr = [#<MyObject::Obj:0x007f828daf33b0>, #<MyObject::Obj:0x007f358daf33b0>..] 我正在考虑使用case语句来构建用户交互部分,但在找到拆分数组的方法时遇到了问题。如何开始对数组进行迭代,从迭代中中断(请求用户输入),然后继续在我停止的地方进行迭代?您可以使用break和next。简短的演示- def f

我正在尝试构建一个CLI。我想打印数组中存储的每个对象的名称。这就是我的阵列的外观:

my_arr = [#<MyObject::Obj:0x007f828daf33b0>, #<MyObject::Obj:0x007f358daf33b0>..]

我正在考虑使用
case
语句来构建用户交互部分,但在找到拆分数组的方法时遇到了问题。如何开始对数组进行迭代,从迭代中中断(请求用户输入),然后继续在我停止的地方进行迭代?

您可以使用
break
next
。简短的演示-

def foo_next(arr)
  arr.each_with_index { |item, index| 
    next if index % 2 == 0
    puts item
  }
end


def foo_break(arr)
  arr.each_with_index { |item, index| 
    puts item
    break if index % 2 == 0
  }
end

nums = (1..10).to_a

foo_next(nums) # prints 2 4 6 8 10

foo_break(nums) # prints 1
Ruby提供了一种方法,可以在组中为您提供一个数组,这可以让您执行类似以下操作:

my_arr = my_arr.collect.with_index do |my_obj, index|
  "#{index} #{my_obj.name}" # do this all the way up here to get the original index
end.each_slice(5)

length = my_arr.size - 1 # how many groups do we need to display
my_arr.each.with_index do |group, index|
  puts group.join("\n") # show the group, which is already in the desired format

  if index < length # if there are more groups to show,
                    # show a message and wait for input
    puts "-- MORE --"
    gets
  end
end
my_arr=my_arr.collect.with_index do | my_obj,index|
“#{index}#{my#u obj.name}”#一直这样做可以得到原始索引
结束。每个_片(5)
长度=my_arr.size-1#我们需要显示多少组
my_arr.each.with_index do |组,索引|
puts group.join(“\n”)35;显示已采用所需格式的组
如果索引<长度#如果要显示更多组,
#显示消息并等待输入
放--“更多--”
得到
结束
结束
使用启用停止/继续流程:

arr = ('a'..'j').to_a
 #=> ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
enum = arr.to_enum

def taker n, enum
  n.times.with_object [] { |_, o| o << enum.next }
end
…然后从您停止的地方继续:

taker 3, enum
 #=> ["c", "d", "e"]
taker 1, enum
 #=> ["f"]

如何打印输出和/或用户提示取决于您。

已更新,希望现在应该更清楚。有任何答案有用吗?我将在今晚晚些时候查看,感谢到目前为止的所有建议!不需要初始中介
数组
。像这样的东西将相当好地工作
my_arr.each_with_index.each_slice(5){slice{slice}放置slice.map{e,i{124;“{i}{e};get}
其中
5
是每个回车键上显示的元素数,我最终使用了这个解决方案,它起了作用。最后,我对数组进行了切片,然后迭代打印。我将其与
next
break
结合使用,以停止或继续我的循环。谢谢所有的答案,如果我周末有时间,我会尝试其他的解决方案。
taker 2, enum
 #=> ["a", "b"]
taker 3, enum
 #=> ["c", "d", "e"]
taker 1, enum
 #=> ["f"]