rails

时间:2016-12-25 20:02:02

标签: ruby-on-rails arrays

我试图找到组织一系列内容的最快方式,以便在我的视图中显示。

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

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

我尝试显示情况

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

这是我的数组,--是一个大型,-是一个小型

我需要获得此可视化

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

第一行很简单,我有一个大一小,所以没关系,我可以去第二排。 另外对于第二行我有2 + 1,所以没问题。 对于第三行,我有小,小和大。 Ops,我只有3个空间的空间,所以我必须跳过大(最后)并取出我在我的数组中找到的第一个小。 我跳过的那个大的第四排是第一个小的。

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

2 个答案:

答案 0 :(得分:0)

一种方式可能是:

  1. 按减小尺寸对项目进行排序
  2. 弹出第一个可用项目
  3. 迭代以找到适合行上剩余空间的第一个项目
  4. 如果行中有更多空格重复3
  5. 转到2

答案 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