2016-12-25 47 views
0

我试图找到最快的方式来组织内容的集合显示在我的视图中。在轨道中的动态组对象的对象

我有两种类型的内容:小和大。小型的尺寸是一个块,大型的尺寸是两个块。

我的页面宽度只能保留3个块的空间,我不想要空闲空间。

我尝试显示情况

[--,-,--,-,-,-,--,-,-,--,--,-] 

这是我的阵列,--是一个大的类型,-是一个小型

我需要获得此可视

--|- 
--|- 
-|-|- 
--|- 
--|- 
-- 

第一排很容易,我有一大一小,所以没关系,我可以去第二排。 也为第二行我有2 + 1,所以没问题。 对于第三行,我有小,大,小。 Ops,我只有3块的空间,所以我不得不跳过大(最后),并采取在我的阵列中找到的第一个小。 第一个小的我跳过了第四行。

逻辑是这样的,有什么办法以一种快速有效的方式重新排列我的数组?当然,我的数组中的每个对象都有一个属性和类型。

回答

0

的一种方式可以是:

  1. 通过减小尺寸
  2. 项目排序弹出第一个可用项目
  3. 迭代找到适合的剩余空间上该行的第一个项目
  4. 如果行中有更多空间重复3
  5. 转至2
+0

当然我要保留订单 –

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