松尾です。

From: OHARA Shigeki <os / iij.ad.jp>

> 複数 key による sort を簡単に実現することはできるでしょうか?

作ってみました。こんな感じで如何でしょうか。


class Array
  def compareByValues(keys,a,b)
    keys.each {|key|
      result = compareByValue(key,a,b)
      if result != 0 then
	return result
      end
    }
    return 0
  end

  def compareByValue(key,a,b)
    va = a[key]
    vb = b[key]

    if va && vb then
      return va <=> vb
    elsif va then
      return -1
    elsif vb then
      return 1
    else
      return 0
    end
  end

  alias _sort sort
  def sort(keys = ['name'])
    self._sort {|a,b| compareByValues(keys,a,b) }
  end
end

ary0 = [
  { 'name' => 'angie',   'age' => '20' },
  { 'name' => 'charlie', 'age' => '19' },
  { 'name' => 'bob',     'age' => '20' },
  { 'age' => '12' },
  { 'name' => 'aaa' },
]

p ary0
p ary0 .sort(['age'])
p ary0 .sort(['name'])
p ary0 .sort(['age','name'])
p ary0 .sort(['name','age'])