7stud -- wrote in post #998723:
data = [1.1, 4.2, 3.1, 2.6, 6.1, 5.0]
needle = rand 10
arr = data.map do |num|
[(num - needle).abs, num]
end
sorted = arr.sort_by {|sub_arr| sub_arr[0]}
puts needle
puts sorted.first[1]
--output:--
2
2.6
And...if you want a ranking of the differences, add one more map():
data = [1.1, 4.2, 3.1, 2.6, 6.1, 5.0]
needle = rand 10
arr = data.map do |num|
[(num - needle).abs, num]
end
sorted = arr.sort_by {|sub_arr| sub_arr[0]}
rankings = sorted.map {|sub_arr| sub_arr[1]}
puts needle
p sorted
puts sorted.first[1]
p rankings
--output:--
2
[[0.6000000000000001, 2.6], [0.8999999999999999, 1.1], [1.1, 3.1], [2.2,
4.2], [3.0, 5.0], [4.1, 6.1]]
2.6
[2.6, 1.1, 3.1, 4.2, 5.0, 6.1]