我有這樣的:訂購/隨機/轉換陣列
a = [[123,1],[124,1],[125,1],[126,2],[127,3],[128,3]]
,我想談談一個加入B:
- 下令值的陣列內
- 隨機值
//更新:
b = [[124,123,125],[126],[128,127]]
如何在ruby中做到這一點?我使用導軌。
我有這樣的:訂購/隨機/轉換陣列
a = [[123,1],[124,1],[125,1],[126,2],[127,3],[128,3]]
,我想談談一個加入B:
//更新:
b = [[124,123,125],[126],[128,127]]
如何在ruby中做到這一點?我使用導軌。
a.group_by(&:last).
sort_by(&:first).
map(&:last).
map {|el| el.map(&:first).shuffle }
這是瘋了!謝謝!哇,一句話,令人印象深刻! – 2010-10-16 23:08:53
你甚至可以通過使用group_by的結果直接作爲散列'a.group_by(&:last).map {| _,v | v.map(&:first).shuffle}' – 2010-10-16 23:26:00
是否需要排序?如果a是a = [[30,100],[123,1],[124,1],[125,1],[126,2],[127,3],[128,3]]'那麼結果是'[[30],[123,124,125],[126],[128,127]]' – 2010-10-16 23:37:00
一種解決方案是:
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]]
以上的問題中更正了b,所以你會說:隨機化第一個。然後像你說的那樣做每一個?組內隨機數是重要的 – 2010-10-16 22:55:22
然後你可以添加shuffle組加入結果 – 2010-10-16 23:26:23
a.reduce([]){|m,i|m[i[1]]=(m[i[1]]||[])<<i[0];m}.compact
thx Lars!雖然我更喜歡有更多的人類語言,所以在重新閱讀代碼的同時,對我來說它確實很有意義:) – 2010-10-16 23:44:37
,我不認爲你的結果括號匹配 - 你的意思是:[124123125],[ 126],[127,128]]? – Codebeef 2010-10-16 22:33:05
你是說你想轉換爲b? – 2010-10-16 22:33:29
你的'b = [[124,123,125]],[[126]],[[128] [127]]]'在ruby中是非法的。也許你的意思是[[123,124,125],[126],[127,128]]' – 2010-10-16 22:47:41