Contando os elementos distintos em uma matriz

Eu tenho uma matriz:

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

Eu quero exibir cada valor de elemento exclusivo e sua contagem de elementos associados assim:

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

Até agora eu tenho:

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
  ]
}

Portanto, cada elemento do Hash contém uma matriz. Posso usar a contagem dessa matriz para obter minha resposta, mas estou tendo problemas para descobrir como processar o hash de forma concisa.

Esta é uma implementação horrível?

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