Скажем, у меня есть массив чисел, например.
ary = [1, 3, 6, 7, 10, 9, 11, 13, 7, 24]
Я хотел бы разделить массив между первой точкой, где меньшее число следует за большим. Мой вывод должен быть:
[[1, 3, 6, 7, 10], [9, 11, 13, 7, 24]]
Я пробовал slice_when
, и он довольно близок:
ary.slice_when { |i, j| i > j }.to_a
#=> [[1, 3, 6, 7, 10], [9, 11, 13], [7, 24]]
Но он также разбивается между 13
и 7
, поэтому мне нужно присоединиться к оставшимся массивам:
first, *rest = ary.slice_when { |i, j| i > j }.to_a
[first, rest.flatten(1)]
#=> [[1, 3, 6, 7, 10], [9, 11, 13, 7, 24]]
который выглядит немного громоздким. Также кажется неэффективным продолжать сравнивать элементы, когда совпадение уже найдено.
Я ищу общее решение, основанное на произвольном условии. Наличие числовых элементов и i > j
является просто примером.
Есть ли лучший способ приблизиться к этому?