У меня есть следующий массив:Как заказать массив в Ruby,
a = [1, 1, 1, 1, 1, 1, 1, 2, 2, 3]
Я хочу, чтобы изменить порядок его последовательных возрастающих последовательностей. Например:
- В начале, у меня есть семь
1
с, два2
с, и один3
. В результате я начинаю вывод с[1, 2, 3]
. - Теперь у меня есть шесть
1
и один2
, поэтому я затем добавляю[1, 2]
в выходной массив. - На данный момент у меня есть пять
1
s и никакие другие номера, поэтому я добавлю последовательность[1]
в выходной массив пять раз.
Для примера входных данных, я в конечном итоге следующий вывод:
a = [1, 2, 3, 1, 2, 1, 1, 1, 1, 1]
Можете ли вы помочь мне, пожалуйста?
@josilber Возможно, это «создать co последовательные возрастающие последовательности, насколько это возможно, с тем, что осталось ». Но для этого требуется, чтобы исходный массив имел некоторое свойство, о котором OP не упоминает, поэтому не имеет значения, что вопрос не ясен. – sawa
Вот один из способов: 'a = [1, 3, 1, 2, 1, 1, 1, 1, 2, 1]; b = a.sort.chunk (&: self) .map (&: last) # => [[1, 1, 1, 1, 1, 1, 1], [2, 2], [3]]; b.first.size.times.flat_map {b.map (&: shift) .compact} # => [1, 2, 3, 1, 2, 1, 1, 1, 1, 1] '. –
Хорошее редактирование! Еще одно: вы должны указать, должны ли элементы быть заказаны (как они есть в exaample). Для них, чтобы быть заказанным, просто включает в себя первоначальный вид, но вы должны сделать это ясно. Если они не обязательно упорядочены, измените массив экземпляров на один, это не упорядочено. Читатели: проголосуйте за повторное открытие. –