在已知片段中拆分数组

安东尼奥·奇波拉

我有一个包含布尔键的哈希数组,例如

    [{"n"=>"img01", "h"=>1},
     {"n"=>"img02", "h"=>1},
     {"n"=>"img03", "h"=>0},
     {"n"=>"img04", "h"=>1}]

我的目标是将具有 h 键以下条件之一的组拆分:[1,1,1][1,0][0,1][1,1]或单个值(如果这些条件中的任何一个都不可能)。在这个例子中,拆分数组的唯一方法是

     [{"n"=>"img01", "h"=>1},{"n"=>"img02", "h"=>1}] 

     [{"n"=>"img03", "h"=>0},{"n"=>"img04", "h"=>1}]

但首先它应该搜索以这种方式完成的数组

          [{"n"=>"img01", "h"=>1},
           {"n"=>"img02", "h"=>1},
           {"n"=>"img03", "h"=>1}] 

然后寻找其他组合

我试图将原始数组拼接成 3 组(在测试中只使用了 1 和 0 的数组)

 irb(main):030:0> b=a.each_slice(3).to_a => [[0, 1, 1], [1, 1, 0], [0, 0, 0], [0]]

然后将结果先对着最大的数组[1,1,1],如果不行再尝试分裂

 irb(main):055:0> (b[0] -  [1,1,1]).count => 1

所以移动到下一个子数组最后一个值

 irb(main):060:0> b[1].push(b[0].pop)=> [1, 1, 0, 1]

在前两个元素的数组中重复搜索

(irb(main):061:0> b[0] - [1,0]).count
(irb(main):061:0> b[0] - [1,1]).count
(irb(main):061:0> b[0] - [0,1]).count

然后合并另一个子数组,再次拆分,重复搜索,但肯定是乱了

金莫·莱托

您可以使用10作为一种虚构的图像宽度。假设水平图像的宽度是垂直图像的两倍。

然后,您可以继续使用它来计算当前图像行上的图像有多宽,以及下一个图像是否仍然适合该行。

width + next element width大于适合“图像行”时,您开始新行。

例子:

input = [{"n"=>"img01", "h"=>1},
   {"n"=>"img02", "h"=>1},
   {"n"=>"img03", "h"=>0},
   {"n"=>"img04", "h"=>1}]

image_rows = []
current_row = []
current_width = 0.0
input.each.with_index(1) do |image_data, idx|

  image_width = image_data['h'] == 1 ? 0.5 : 1.0

  if current_width + image_width > 1.5
    image_rows << current_row
    current_row = [image_data]
    current_width = image_width
  else
    current_row << image_data
    current_width += image_width
  end

  if idx == input.size
    image_rows << current_row
  end
end

require 'json'
puts JSON.pretty_generate(image_rows)

输出:

[
  [
    {
      "n": "img01",
      "h": 1
    },
    {
      "n": "img02",
      "h": 1
    }
  ],
  [
    {
      "n": "img03",
      "h": 0
    },
    {
      "n": "img04",
      "h": 1
    }
  ]
]
  • 当当前行111的宽度为0.5 + 0.5 + 0.5 = 1.5=> 没有任何内容时
  • 当当前行10的宽度为1.0 + 0.5 = 1.5=> 没有任何内容时
  • 当当前行01的宽度为0.5 + 1.0 = 1.5=> 没有任何内容时
  • 当前行11的宽度为0.5 + 0.5 = 1.0=> 只有 0.5 适合
  • 当前行1的宽度为0.5=> 1.0 或 0.5 适合
  • 当前行0的宽度为1.0=> 只有 0.5 适合

您可以111通过执行找到第一个包含image_rows.find { |row| row.size == 3 }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

NumPy-按已知大小拆分数组

来自分类Dev

拆分数组中的元素

来自分类Dev

在Javascript中的参数中拆分数组

来自分类Dev

Java对象中的拆分数组

来自分类Dev

在Pyspark的RDD分区中拆分数组

来自分类Dev

如何拆分数组中的数据

来自分类Dev

如何在fortran中拆分数组?

来自分类Dev

MATLAB:拆分数组

来自分类Dev

Angularjs 拆分数组

来自分类Dev

拆分数组 Python

来自分类Dev

拆分数组

来自分类Dev

函数通过计算拆分数组中的值来为循环填充拆分数组

来自分类Dev

在低维数组中拆分数组的最后一维

来自分类Dev

在多个数组bash中拆分数组元素

来自分类Dev

自动拆分数组以输入到Matlab中的表中

来自分类Dev

如何在python中拆分数组中的每个值?

来自分类Dev

从数组中拆分数据并提取特定数据

来自分类Dev

如何在Codeigniter的视图页面中拆分数组值

来自分类Dev

我可以从函数参数中拆分数组

来自分类Dev

Java如何在函数中返回拆分数组?

来自分类Dev

php,拆分数组中的额外值后

来自分类Dev

PHP如何在变量中拆分数组

来自分类Dev

Android中可拆分数组类的问题

来自分类Dev

如何在 ng-repeat 中拆分数组列表

来自分类Dev

拆分数组并插入到laravel中的数据库

来自分类Dev

如何拆分数组以分隔 JavaScript 中的后续相似项

来自分类Dev

拆分数组。红宝石

来自分类Dev

按行拆分数组

来自分类Dev

拆分数组。红宝石