From: Tim Becker Date: 2006-05-17T01:10:51+09:00 Subject: Re: In search of elegant indices searching > my_hash={'x',[1,1,3,1,5,6],'w',[1,2,3,1,4,5],'y',[1,1,1,4,4,6]} , >res={{'x'=>1,'w'=>1}=>[0,3],{'x'=>3,'w'=>3}=>[2],{'x'=>5,'w'=>4}=>[4],{'x'=>6, > 'w'=>5}=>[5]}, > > I know that at the 0-th and 3-th measurement point, 'x' and 'w' didn't vary, > so, any change in the function values is due to the change of 'y' from 1 to 4. I still don't get it: {'x'=>1,'w'=>1}=>[0,3] means the 0th and 3rd point are both '1' {'x'=>3,'w'=>3}=>[2] means the 2nd point is 3 in both {'x'=>5,'w'=>4}=>[4] now it gets weird, this means the 4th position of x is 5 and of w is 4... Why only that result? Seems a little arbitrary, why doesn't the result contain: {'x'=>1,'w'=>2}=>[1] ? And how come `y` is left out of the results alltogether? How about this: def whatever arr1, arr2 h = {} arr1.each_with_index { |val, i| h[[val, arr2[i]]] ||= [] h[[val, arr2[i]]].push i } h end whatever([1,1,3,1,5,6], [1,2,3,1,4,5]) # => {[1, 2]=>[1], [5, 4]=>[4], [3, 3]=>[2], [1, 1]=>[0, 3], [6, 5]=>[5]} -tim