我试图找到组织一系列内容的最快方式,以便在我的视图中显示。
我有两种类型的内容:小型和大型。小型的大小是一个块,大型的大小是两个块。
我的页面宽度只能保留3个区块的空间,而且我不想要空闲空间。
我尝试显示情况
[--,-,--,-,-,-,--,-,-,--,--,-]
这是我的数组,--
是一个大型,-
是一个小型
我需要获得此可视化
--|-
--|-
-|-|-
--|-
--|-
--
第一行很简单,我有一个大一小,所以没关系,我可以去第二排。 另外对于第二行我有2 + 1,所以没问题。 对于第三行,我有小,小和大。 Ops,我只有3个空间的空间,所以我必须跳过大(最后)并取出我在我的数组中找到的第一个小。 我跳过的那个大的第四排是第一个小的。
逻辑是这样的,有没有办法以快速有效的方式重新排列我的阵列?当然,我的数组的每个对象都有一个属性类型。
答案 0 :(得分:0)
一种方式可能是:
答案 1 :(得分:0)
ary = %w(-- - -- - - - -- - - -- -- - -- -- -- -- --)
rows = [[]]
until ary.empty?
row_length = rows.last.join.length
case row_length
when 3
rows << []
when 2
if ary.first == '--'
# peak ahead and consume next small element
n = ary.index { |each| each == '-' }
next rows << [] unless n
next rows.last << ary.delete_at(n)
end
end
rows.last << ary.shift
end
p rows