Ruby数组 - 最高整数

Cha*_*ies 0 ruby arrays each

Ruby的全新品牌,热爱它.只是玩下面的代码:

    public
    def highest 
      highest_number = 0
      each do |number|
        number = number.to_i
        highest_number = number if number > highest_number
        puts highest_number 
      end
    end


    array = %w{1 2 4 5 3 8 22 929 1000 2}
    array.highest
Run Code Online (Sandbox Code Playgroud)

所以目前我得到的回应是:

    1
    2
    4
    5
    5
    8
    22
    929
    1000
    1000
Run Code Online (Sandbox Code Playgroud)

所以它首先放置数组,然后放入数组中的最高数字.但是我想要的只是最高的数字......

我玩过这个,无法搞清楚!对不起,这个新手问题

Chr*_*nch 7

问题是你putseach循环中有语句,因此在每次迭代时它会打印出当前最高的数字.尝试将它移到each循环外面,这样就可以了:

public

def highest
  highest_number = 0
  each do |number| 
    number = number.to_i
    highest_number = number if number > highest_number
  end
  puts highest_number
end

array = %w{1 2 4 5 3 8 22 929 1000 2}
array.highest
Run Code Online (Sandbox Code Playgroud)

这产生了所需的输出:

1000
Run Code Online (Sandbox Code Playgroud)

  • @Charlie:您可以通过[接受Chris的回答]来表达"谢谢"(http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work). (6认同)

mu *_*ort 5

您还可以使用max_by以下方法省去一些麻烦:

>> a = %w{1 2 4 5 3 8 22 929 1000 2}
=> ["1", "2", "4", "5", "3", "8", "22", "929", "1000", "2"]
>> m = a.max_by { |e| e.to_i }
=> "1000"
Run Code Online (Sandbox Code Playgroud)

您还可以使用另一个版本max_by:

m = a.max_by(&:to_i)
Run Code Online (Sandbox Code Playgroud)

避免"只调用方法的块"的额外噪音.

但这可能是一个Ruby块学习练习,因此使用标准库的现有部分并不重要.OTOH,很高兴知道标准库中有什么东西可以用来max_by或者max也算作学习练习.