gpt4 book ai didi

ruby - 查找最接近数组平均值的元素

转载 作者:数据小太阳 更新时间:2023-10-29 07:24:47 28 4
gpt4 key购买 nike

执行以下操作的“ ruby ”方式是什么?我仍然在思考更多的命令式编程,并没有真正适应 ruby​​ 的思考。我想要做的是找到大小最接近数组平均值的元素,例如,考虑以下数组

[1,2,3] 

平均值为 2.0。我要编写的方法返回从其上方和下方最接近平均值的元素,在本例中为 1 和 3。

另一个例子可以更好地说明这一点:

[10,20,50,33,22] avg is 27.0 method would return 22 and 33.

最佳答案

这不是最有效的,但(以我的拙见)它很像 Ruby。

class Array
# Return the single element in the array closest to the average value
def closest_to_average
avg = inject(0.0,:+) / length
min_by{ |v| (v-avg).abs }
end
end

[1,2,3].closest_to_average
#=> 2

[10,20,50,33,22].closest_to_average
#=> 22

如果你真的想要 n 个最接近的项目,那么:

class Array
# Return a number of elements in the array closest to the average value
def closest_to_average(results=1)
avg = inject(0.0,:+) / length
sort_by{ |v| (v-avg).abs }[0,results]
end
end

[10,20,50,33,22].closest_to_average #=> [22]
[10,20,50,33,22].closest_to_average(2) #=> [22, 33]
[10,20,50,33,22].closest_to_average(3) #=> [22, 33, 20]

这是如何运作的

avg = inject(0.0,:+)/length
是以下内容的简写:
avg = self.inject(0.0){ |sum,n| sum+n }/self.length
我从 0.0 而不是 0 的值开始,以确保总和将是一个 float ,因此除以长度不会给我一个整数-舍入值。

排序依据{ |v| (v-avg).abs
根据数字和平均值之间的差异(从最低到最高)对数组进行排序,然后:
[0,结果]
从该数组中选择第一个 results 个条目。

关于ruby - 查找最接近数组平均值的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22086311/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com