Sorting

I’ve been trying to sort a mixed array in Ruby the shortest way. Each element of the array by itself is a mixed array of a number and and a hash:

a = [
  [0, {:a=>"31", :b=>"21"}],
  [1, {:a=>"32", :b=>"11"}],
  [1, {:a=>"25", :b=>"19"}],
  [0, {:a=>"12", :b=>"10"}]
]
 
#sort by first item of each row (number)
a.sort{|x,y| x[0]  y[0]}
 
#sort by the first item in the hash
a.sort{|x,y| x[1][:a]  y[1][:a]}

Note: I initially posted this as a question on Stackoverflow and got different but correct answers.

Finding common elements

To find common elements between a number of arrays, simply add them to a hash and use the & operator, which creates a new array from two existing arrays containing only elements that are common to both arrays, omitting duplication. (See Techtopia)

a1 = [[1, 2, 3], [1, 2, 2], [2, 2, 3], [3, 2, 1]]
a2 = [[1, 2, 1], [1, 2, 2], [2, 2, 4], [3, 2, 1], [1, 2, 3]]
a3 = [[1, 2, 3], [1, 2, 2], [2, 2, 3], [3, 2, 1], [2, 2, 2]]
hash = {i1: a1, i2: a2, i3: a3}
common = hash.values.inject{|x, y| x & y}

What I can do with Ruby in just one line fascinates me.

  1. Mitesh
    Jul 27, 2012

    a1 & a2 & a3 is the better way to do it ruby.