функция для удаления наименьшего числа в рубине - PullRequest
0 голосов
/ 26 июня 2018

В настоящее время пытается создать функцию ruby, которая удаляет наименьшее число, если это минимальное число дублируется, оно должно удалить только первое минимальное число. Вот код, который я попробовал

def RemoveSmallest(numbers)

    if numbers.count(numbers.min.uniq) > 1
      numbers.delete_at(numbers.index numbers.min.uniq)
      numbers
    else 
      numbers.delete(numbers.min)
      numbers

    end

end

puts RemoveSmallest([2,2,4,5,6])

это ошибка

remove_small.rb:3:in `RemoveSmallest': undefined method `uniq' for 2:Fixnum (NoMethodError)
    from remove_small.rb:15:in `<main>'

я не уверен, почему код проходит неправильно, когда я применяю uniq метод к нему

1 Ответ

0 голосов
/ 26 июня 2018

numbers.min возвращает число, а не массив. Вы не можете вызвать uniq для него, это не метод для чисел.

Ваш код в первой ветви успешно удалит только первый экземпляр с наименьшим числом без .uniq, поскольку numbers.index находит первое вхождение.

Фактически весь блок if / else является избыточным. Первая ветвь обрабатывает оба типа ввода, поэтому нет особого смысла в определении особого случая для многих против одного:

def remove_smallest(array)
  array.delete_at(array.index(array.min))
  array
end

p remove_smallest([1, 2, 3, 4])    # [2, 3, 4]
p remove_smallest([4, 3, 1, 2, 1]) # [4, 3, 2, 1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...