在rails中订购/随机化/转换数组

时间:2010-10-16 22:24:47

标签: ruby-on-rails ruby arrays multidimensional-array

我有这个:

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

我想把a变成b:

  • 按值排序
  • 在数组值中随机

//更新:

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

如何在ruby中执行此操作?我正在使用rails。

3 个答案:

答案 0 :(得分:5)

a.group_by(&:last).
  sort_by(&:first).
  map(&:last).
  map {|el| el.map(&:first).shuffle }

答案 1 :(得分:0)

一个解决方案是:

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

答案 2 :(得分:0)

a.reduce([]){|m,i|m[i[1]]=(m[i[1]]||[])<<i[0];m}.compact