From: 7stud -- Date: 2011-05-15T06:36:28+09:00 Subject: Re: search nearest to elements in array (hash) 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] -- Posted via http://www.ruby-forum.com/.