bogdan_uman
@bogdan_uman
шлЫмазл неукЪ-поцЪ

Rails следующий элемент массива?

Здравствуйте. Нужно сформировать новый массив и дополнить текущий элемент значениями следующего элемента. Если элемент последний значит значением следующего элемента будет первый элемент. Вот на работающий пример, но мне кажется что он не оптимальный, и можно лучше написать? Спасибо.
arr = [{id: 0, val: 'zero'}, {id: 1, val: 'one'}, {id: 2, val: 'two'}]
arr.map!.with_index { | v, i |
      next_v = arr[ arr.size == i + 1 ? 0 : i + 1 ];
      v.merge!( { next_id: next_v[ :id ], next_val: next_v[ :val ] } ) }

puts arr

# {id:0, val:"zero", next_id:1, next_val:"one"}
# {id:1, val:"one", next_id:2, next_val:"two"}
# {id:2, val:"two", next_id:0, next_val:"zero"}
  • Вопрос задан
  • 342 просмотра
Пригласить эксперта
Ответы на вопрос 1
@SilentFl
Мой вариант:
arr = [{id: 0, val: 'zero'}, {id: 1, val: 'one'}, {id: 2, val: 'two'}]
nexts = arr.rotate.map { |item| { next_id: item[:id], next_val: item[:val] } } # new hash with renamed keys
arr = arr.zip(nexts).map { |item, next_item| item.merge(next_item) }
puts arr
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы