Я хотел бы найти максимальное значение в массиве целых чисел, вернуть это значение и удалить его из массива. Есть ли для этого встроенная функция?
Для a = [1,2,3,4]
я легко могу сделать это a.max
, которое возвращает 4
. Однако a[....]
остается без изменений.
4 ответа
Вы могли бы сделать что-то подобное.
a = [1,2,3,4]
a.delete(a.max)
=> 4
a => [1, 2, 3]
Чтобы удалить один экземпляр, если есть дубликаты, вы можете использовать что-то вроде (согласно комментариям используйте a.index (a.max), чтобы получить индекс максимального значения)
a = [1, 2, 3, 4, 4]
a.delete_at(a.index(a.max))
=> 4
a => [1, 2, 3, 4]
Контрольные показатели:
require 'fruity'
ARY = (0..99).to_a.shuffle
compare do
matthewalexander { a = ARY.dup; a.delete_at(a.index(a.max)) }
sagarpandya82 { a = ARY.dup; a.sort!.pop }
end
# >> Running each test 512 times. Test will take about 1 second.
# >> sagarpandya82 is faster than matthewalexander by 10.000000000000009% ± 10.0%
Увеличение размера ARY изменит результаты:
ARY = (0..999_999).to_a.shuffle
compare do
matthewalexander { a = ARY.dup; a.delete_at(a.index(a.max)) }
sagarpandya82 { a = ARY.dup; a.sort!.pop }
end
# >> Running each test once. Test will take about 5 seconds.
# >> matthewalexander is faster than sagarpandya82 by 3x ± 0.1
Используйте подход, соответствующий вашим потребностям. Если вы не знаете размер массива, я бы рекомендовал предположить, что ваши данные будут расти, поскольку они так близки к небольшим массивам.
Это работает:
a.delete_at(a.index(a.max))
Это должно помочь:
a.sort!.pop #=> 4
Похожие вопросы
Новые вопросы
arrays
Массив - это упорядоченная линейная структура данных, состоящая из набора элементов (значений, переменных или ссылок), каждый из которых идентифицируется одним или несколькими индексами. Когда вы спрашиваете о конкретных вариантах массивов, используйте вместо них следующие связанные теги: [vector], [arraylist], [matrix]. При использовании этого тега в вопросе, относящемся к языку программирования, пометьте вопрос используемым языком программирования.