Skip to content

Instantly share code, notes, and snippets.

@apeiros
Created March 7, 2010 20:33
Show Gist options
  • Save apeiros/324610 to your computer and use it in GitHub Desktop.
Save apeiros/324610 to your computer and use it in GitHub Desktop.
## reversesortby.rb
class ReverseSortBy
include Comparable
attr_reader :value
def initialize(value)
@value = value
end
def <=>(other)
other.value <=> @value
end
end
module Kernel
def asc(value)
value
end
def desc(v)
ReverseSortBy.new(v)
end
module_function :asc, :desc
end
## usage
if __FILE__ == $PROGRAM_NAME then
require 'pp'
Person = Struct.new(:first_name, :last_name, :age)
people = [
Person.new('Peter', 'Pan', 23),
Person.new('Peter', 'Pan', 15),
Person.new('Peter', 'Parker', 15),
]
pp people.sort_by { |person| [asc(person.first_name), asc(person.last_name), desc(person.age)] }
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment