У меня есть массив объектов, и я хотел бы сгруппировать их на основе различия между атрибутами двух смежных элементов. Массив уже отсортирован по этому атрибуту. Например:Группировка массива путем сравнения двух смежных элементов
Оригинальный массив:
array = [a, b, c, d, e]
и
a.attribute = 1
b.attribute = 3
c.attribute = 6
d.attribute = 9
e.attribute = 10
Если я хочу, чтобы сгруппировать элементы таким образом, чтобы разница между атрибутами 2 соседних элементов меньше или равный 2, результат должен выглядеть так:
END РЕЗУЛЬТАТ
result_array = [[a, b], [c], [d, e]]
ЧТО Я ИМЕЮ
def group_elements_by_difference(array, difference)
result_array = []
subgroup = []
last_element_attribute = array.first.attribute
array.each do |element|
if element.attribute <= (last_element_attribute + difference)
subgroup << element
else
#add the subgroup to the result_array
result_array << subgroup
subgroup = []
subgroup << element
end
#update last_element_attribute
last_element_attribute = element.attribute
end
result_array << subgroup
end
ВОПРОС
Есть встроенная функция в Ruby, 1.9.3, такие как group_by
, которые могли бы заменить мой group_elements_by_difference
?
'slice_before.with_index'? –
'slice_before' с состоянием должно делать. –