Ruby 使用循环创建范围数组,将范围组合到Fixnum数组

Ruby 使用循环创建范围数组,将范围组合到Fixnum数组,ruby,Ruby,我正在遍历一组foo,它们有起始位置和大小 if ! foo.position.nil? @foo_top = foo.position + foo.size - 1 @occupied_array = (foo.position..@foo_top) end 我看到我正在每个循环上重新分配数组。我的最终目标是将所有范围合并到一个fixnum数组中,以便进行比较 我是不是应该:@occulated\u array+=(foo.position..@foo\u top)然后@

我正在遍历一组
foo
,它们有
起始位置
大小

if ! foo.position.nil?
    @foo_top = foo.position + foo.size - 1
    @occupied_array = (foo.position..@foo_top)
  end
我看到我正在每个循环上重新分配数组。我的最终目标是将所有范围合并到一个fixnum数组中,以便进行比较

我是不是应该:
@occulated\u array+=(foo.position..@foo\u top)
然后
@occulated\u array.稍后到a


谢谢

如果我理解正确的话,您有一个
Foo
对象数组,每个对象以起始和长度表示一系列整数。您需要生成一个整数数组,表示所有
Foo
对象所包含的所有值

如果这是真的,请尝试以下操作:

Foo = Struct.new(:position, :size)
all_the_foos = [Foo.new(10,3), Foo.new(3,3), Foo.new(15,5)]
p all_the_foos.flat_map { |f| (f.position...(f.position+f.size)).to_a }.uniq.sort

#=> [3, 4, 5, 10, 11, 12, 15, 16, 17, 18, 19]

如果不确定是否需要
#uniq
#sort
,请根据需要删除。

使用此方法,您会严重减少:

pos_size_pairs = [[1,5], [3,6], [15,2], [20,7]]
pos_size_pairs.map { |pos,sz| (pos...(pos+sz)).to_a }.reduce(:|)
=> [1, 2, 3, 4, 5, 6, 7, 8, 15, 16, 20, 21, 22, 23, 24, 25, 26]

我认为你混淆了
位置
大小
的含义。这不是一个好的提问方式。必须始终提供输入和输出,如果您尝试了任何操作,则必须提供代码。只有代码没有办法帮助我们帮助你。