From: brabuhr@... Date: 2009-06-09T03:55:17+09:00 Subject: Re: How to sort array ascending, except zero ? On 6/8/09, Robert Klemme wrote: > On 08.06.2009 17:07, andrea wrote: >> irb(main):003:0> a=[0,3,2,-5,0,4] >> => [0, 3, 2, -5, 0, 4] >> irb(main):004:0> a.sort{|x,y| x.zero? ? 1 : x<=>y} >> => [-5, 2, 3, 4, 0, 0] > > irb(main):003:0> a=[1,0] > => [1, 0] > irb(main):004:0> a.sort{|x,y| x.zero? ? 1 : x<=>y} > => [0, 1] > irb(main):005:0> Assuming a stable sorting algorithm, sort twice is an option: irb(main):001:0> [1, 0].sort.sort_by{|n| n.zero? ? 1 : 0} => [1, 0] irb(main):002:0> [0,3,2,-5,0,4].sort.sort_by{|n| n.zero? ? 1 : 0} => [-5, 4, 3, 2, 0, 0] irb(main):003:0> a = (1..10).map{|n| rand(5) - 2} => [-1, 2, -1, 0, 0, 2, 0, 2, 2, -2] irb(main):004:0> a.sort.sort_by{|n| n.zero? ? 1 : 0} => [-2, -1, -1, 2, 2, 2, 2, 0, 0, 0] irb(main):033:0> a.sort.sort_by{|n| n.zero?.to_s} => [-2, -1, -1, 2, 2, 2, 2, 0, 0, 0]