豊福です。

青山さん
> bar.sort!{|a,b| (a.to_i <=> b.to_i).nonzero? || a.to_s <=> b.to_s }
  ...
> bar.filter{|i| [i.to_i, i.to_s, i] }.sort!.filter{|i| i.pop }

  中途半端な方法思いつきました。

bar.filter{|i| [i, nil, nil] }.sort!{|a,b|
    ((a[1] || (a[1] = a[0].to_i)) <=> (b[1] || (b[1] = b[0].to_i))).nonzero? ||
    ((a[2] || (a[2] = a[0].to_s)) <=> (b[2] || (b[2] = b[0].to_s)))
  }.filter{|i| i[0] }

  速さも中途半端だと思います。
---
                        豊福
                        toyofuku / juice.or.jp