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)
所以它首先放置数组,然后放入数组中的最高数字.但是我想要的只是最高的数字......
我玩过这个,无法搞清楚!对不起,这个新手问题
问题是你puts在each循环中有语句,因此在每次迭代时它会打印出当前最高的数字.尝试将它移到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)
您还可以使用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也算作学习练习.