Embaralhamento ponderado de rubi de uma linha

Encontrei uma necessidade específica na AOL e pensei que minha solução seria útil para outras pessoas.

Basicamente, temos uma lista de (digamos) gatos. Eu quero 10 gatos aleatórios desta lista, mas alguns devem aparecer mais do que outros, de acordo com um weightatributo (> 0).

Bem, muito simples na verdade:

cats.sort_by { |cat| - cat.weight * rand() }

O -é necessário porque sort_by trabalha do valor mais baixo para o mais alto, que é o oposto do que pretendemos fazer.

Aproveitar 🙂