删除元素ruby后如何重新生成数组

时间:2014-08-07 15:58:29

标签: ruby arrays

措辞不好的问题我知道,如果有人可以建议改写,那么我很乐意改变。

我想解释的是这个...... 让我们说你经历了10次迭代,但数组只包含5个条目。在第6次迭代中,您需要一个具有完整值的新数组。你是怎么做到的?

array = [1,2,3,4,5]
10.times do 
 foo = Foo.new
 foo.bar = array.pop
end

我确信这很简单。

更新

School::YEARS = [2009, 2010, 2011, 2012, 2012] 
        @array = School::YEARS #this contains five elements
        10.times do |x|
         classroom = School.new
         classroom.year = @array.pop
        end
=>2009, 2010, 2011, 2012, 2012, 2009, 2010, 2011, 2012, 2012

所以这里我想要一个包含与迭代开始之前相同的五个元素的新数组。

2 个答案:

答案 0 :(得分:1)

这会做你想要的吗?

array = [1, 2, 3, 4, 5]
array.cycle.first(10).each do |x|
  puts x
end

这应输出以下数字:1,2,3,4,5,1,2,3,4,5。

答案 1 :(得分:1)

正如@DavidGrayson建议的那样,考虑使用Ruby Array#cycle method。但是,根据您的需要,您可能希望直接使用Enumerator object

years = [2009, 2010, 2011, 2012, 2012] 
repeated_years = years.cycle.each
10.times do
  classroom = School.new
  classroom.year = repeated_years.next
end

[编辑] 或者,如果您只想根据源数组中重复值的十个值数组,则可以使用cycle方法,如下所示:

years = [2009, 2010, 2011, 2012, 2012] 
repeated_years = years.cycle(2).to_a
repeated_years # => [2009, 2010, 2011, 2012, 2012, 2009, 2010, 2011, 2012, 2012]