【问题标题】:function to remove the smallest number in ruby删除红宝石中最小数字的功能
【发布时间】:2023-04-11 11:33:01
【问题描述】:

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

【问题讨论】:

  • 你的方法应该被称为remove_smallest,而不是RemoveSmallest。大小写在 Ruby 中很重要,当您使用前导大写字母时,您正在创建一个常量。
  • numbers.delete_at(numbers.index(numbers.min))
  • @meagar 感谢您的反馈,对于 ruby​​ 来说非常新,我使用 camelcase 的原因是因为我在网络上的某个地方阅读过它,以使变量更易于阅读
  • @user3292755 Camel case 用于定义常量,如类和模块名。

标签: ruby rubygems


【解决方案1】:

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]

【讨论】:

    猜你喜欢
    • 2015-05-02
    • 2013-08-25
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 2018-03-30
    • 2012-07-07
    相关资源
    最近更新 更多