删除 ruby 中最小数字的函数

function to remove the smallest number in ruby

目前正在尝试创建一个删除最小数字的 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 方法时代码传递错误

numbers.min returns 一个数字,不是数组。您不能对其调用 uniq,那不是数字方法。

您在第一个分支中的代码将仅成功删除没有 .uniq 的最小编号的第一个实例,因为 numbers.index 找到第一个实例。

事实上,整个if/else块都是多余的。第一个分支处理两种类型的输入,因此为许多 vs 一个定义特殊情况几乎没有意义:

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]