Contando los elementos distintos en una matriz

Tengo una matriz:

a = [1, 2, 3, 3, 6, 8, 1, 9]

Quiero mostrar cada valor de elemento único y su recuento de elementos asociado de esta manera:

1: 2
2: 1
3: 2
6: 1
8: 1
9: 1

Hasta ahora tengo:

a.sort.group_by { |x| x }
{
  1 => [
    [0] 1,
    [1] 1
  ],
  2 => [
    [0] 2
  ],
  3 => [
    [0] 3,
    [1] 3
  ],
  6 => [
    [0] 6
  ],
  8 => [
    [0] 8
  ],
  9 => [
    [0] 9
  ]
}

Entonces cada elemento del Hash contiene una matriz. Puedo usar el recuento de esa matriz para obtener mi respuesta, pero tengo problemas para descubrir cómo procesar el hash de manera concisa.

¿Es esta una implementación horrible?

a.sort.group_by { |x| x }.each {|x| puts "#{x[0]} #{x[1].count}" }

Respuestas a la pregunta(4)

Su respuesta a la pregunta