Упорядочить / рандомизировать / преобразовать массив в рельсы - PullRequest
2 голосов
/ 17 октября 2010

У меня есть это:

a = [[123,1],[124,1],[125,1],[126,2],[127,3],[128,3]]

И я хотел бы превратить a в b:

  • упорядочено по значению
  • случайно в массиве значений

// обновлено:

b = [[124,123,125],[126],[128,127]]

Как это сделать в ruby? Я использую рельсы.

Ответы [ 3 ]

5 голосов
/ 17 октября 2010
a.group_by(&:last).
  sort_by(&:first).
  map(&:last).
  map {|el| el.map(&:first).shuffle }
0 голосов
/ 17 октября 2010
a.reduce([]){|m,i|m[i[1]]=(m[i[1]]||[])<<i[0];m}.compact
0 голосов
/ 17 октября 2010

Одно из решений:

a = [[123,1],[124,1],[125,1],[126,2],[127,3],[128,3]]

a = a.sort {|d, e| d[1] <=> e[1]}

prev = a[0][1]; result = []; group = [];

a.each do |e|
  if e[1] == prev
    group << e[0]
  else
    result << group.shuffle
    group = [e[0]]
    prev = e[1]
  end
end
result << group

p result

Выполнение:

$ ruby t.rb
[[125, 123, 124], [126], [127, 128]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...