2013-01-28

Ruby下所謂的Array排序...

sort一般來說都是從小到大,相反的話還要reverse,且多層的話無法控制,所以可以傳入block的寫法來做sort

[1,3,2,4].sort
#=> [1,2,3,4]

[1,3,2,4].sort{|a,b|a<=>b}
#=> [1,2,3,4]

[1,3,2,4].sort{|a,b|b<=>a}
#=> [4,3,2,1]

#sort從第一個項目開始比,如果array且第一個項目全等於,則比對第二項目,無法比對如obj則會報錯

[[1,4],[3,2],[2,1],[4,3],[4,0]].sort
#=> [[1, 4], [2, 1], [3, 2], [4, 0], [4, 3]]

#所以此題無法排序第二組解,因此

[[1,4],[3,2],[2,1],[4,3],[4,0]].sort{|a,b|a[1]<=>b[1]}
#=>[[4, 0], [2, 1], [3, 2], [4, 3], [1, 4]]

#當然如上,你高興也可以reverse

[[1,4],[3,2],[2,1],[4,3],[4,0]].sort{|a,b|b[1]<=>a[1]}
#=>[[1, 4], [4, 3], [3, 2], [2, 1], [4, 0]]

#至於多個值,單純別人的demo

objects.sort do |a, b|
  (a.lastname <=> b.lastname).nonzero? ||
  (a.firstname <=> b.firstname)
end

所以這樣就算array裡面的東西是object,也可以取出值來做排序就是了

沒有留言:

張貼留言