From: trebor777 Date: 2007-10-30T11:18:36+09:00 Subject: Re: find the closest items in an array to a given value. Ara.T.Howard-2 wrote: > > > On Oct 29, 2007, at 2:19 PM, trebor777 wrote: > >> >> Hi! >> >> I'm searching for a light method for finding the closest items to a >> given >> value. >> >> example/ >> >> 1..10 >> in a range >> i give, 5.5, return 5 and 6 for example.... >> >> as i'm working with arrays, containing numbers, but with no regular >> step... >> it will change i think. >> example.. >> >> a = [ 1, 1.25, 2, 3, 3.5 ] >> >> if i give 1.85, it gives me 1.25 and 2 >> >> It's for a little music game, where player has to tap at the right >> moment, >> notes are register in a array, with the correct time, and as >> players can't >> be accurate as a computer, i need some error margin. I working >> with 0.05 >> rounded values. > > install rbtree - it has upper_bound and lower_bound methods that do > just this - otherwise you can do something like this: > > > > cfp:~ > cat a.rb > require 'alib' > > Array.send :include, alib.bsearch > > list = %w( a b c c c d e f ) > index = list.bsearch_first {|x| x <=> "c"} > p list[index - 1 .. index + 1] > > list = %w( a b c c c d e f ) > index = list.bsearch_last {|x| x <=> "c"} > p list[index - 1 .. index + 1] > > > cfp:~ > ruby a.rb > ["b", "c", "c"] > ["c", "c", "d"] > > > > a @ http://codeforpeople.com/ > -- > it is not enough to be compassionate. you must act. > h.h. the 14th dalai lama > > While waiting for solutions, i did something really similar. a = myhash.keys.sort[value-0.05..value+0.05] then i just use myhash[a[x]] -- View this message in context: http://www.nabble.com/find-the-closest-items-in-an-array-to-a-given-value.-tf4714369.html#a13481318 Sent from the ruby-talk mailing list archive at Nabble.com.