У меня есть массив хэшей, которые содержат логический ключ, например
[{"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
, а затем объедините другой подмассив, разделите его снова и повторите поиск, но он определенно запутался