我需要在不使用max
方法的情况下找到数组的最大值。现在我有:
def max(arr)
largest_num = arr(1)
arr.each do |num|
if element >= largest_num
largest_num = num
else
largest_num = largest_num
end
puts largest_num
end
my_numbers = [20, 30, 40, 50]
puts max(my_numbers)
end
5条答案
按热度按时间qxsslcnc1#
为什么不直接使用
sort
和last
呢?yb3bgrhw2#
我被告知我应该使用.sort和.last,但不太确定从哪里开始
在编程时,自我启动是非常重要的。这是一个基本特征,因为该领域和所有技术都在快速发展。我建议您也阅读“How much research effort is expected of Stack Overflow users?“,特别是如果您想使用Stack Overflow作为参考资料的话。
下面是学习如何使用Ruby进行实验和自学的方法:
Ruby捆绑了IRB。在命令行输入
irb
,它会打开并显示一个提示符。在该提示符下,您可以输入Ruby表达式并查看结果。我的提示符可能与您的提示符不同,因为我的提示符是自定义的,但您可以了解如何使用它:要将数组分配给变量,请执行以下操作:
我可以通过输入变量名并按Return或Enter键来查看分配给
my_numbers
的值:我可以使用
my_numbers
上的方法进行实验:这个函数将数组随机化,并没有改变
my_numbers
,只是打乱了数组,然后按照打乱后的顺序输出一个新的数组:每次运行
shuffle
时,它都会随机化数组并返回另一个数组:因为你想用
sort
和last
来求最大值,所以最好从一个无序数组开始。数组会在混洗之后排序。
last
的作用如下:现在你知道的够多了,可以自己去弄清楚了。
np8igboo3#
如果您需要使用
sort
和last
,则下面的答案不适用。arr.sort.last
的效率很低,因为它需要对整个数组进行排序,而您所需要的只是最大值。reduce
函数(别名为inject
)用于将数组“缩减”为单个对象。要实现求和,可以执行以下操作:0
是求和的起始值,然后对于每个元素,使用到目前为止的求和和数组中的元素运行该块。然后将块的结果(返回sum + num
,因为ruby中的最后一个语句是隐式返回的)设置为下一个元素的新值sum
。sum
的最终值是返回的值。这类似于执行以下操作:
如果不指定起始值,则第一个元素将被作为起始值。因此,在我的
reduce
解决方案中,第一个元素被设置为“最大”,然后依次传递每个元素的最大值,或者如果该元素大于当前最大值,则它将成为新的最大值。50few1ms4#
如果您真的被告知应该使用
sort
和last
,那么答案很简单:如果您希望它在方法中:
uwopmtnx5#
如果您尝试在不使用默认函数的情况下解决此问题,请首先不使用排序方法对数组进行排序
这将给予排序数组中的最大数字