我有这个:
a = [[123,1],[124,1],[125,1],[126,2],[127,3],[128,3]]
我想把a变成b:
//更新:
b = [[124,123,125],[126],[128,127]]
如何在ruby中执行此操作?我正在使用rails。
答案 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