Stable multi-key sort with nil values last

Crystal
record Person, name : String, age : Int32?, id : Int32

people = [
  Person.new("Ada", 36, 1),
  Person.new("Bo", nil, 2),
  Person.new("Cy", 36, 3),
]

indexed = [] of Tuple(Person, Int32)
people.each_with_index { |person, i| indexed << {person, i} }

# nil ages last; index keeps equal keys stable
sorted = indexed.sort_by { |(person, i)| {person.age.nil? ? 1 : 0, person.age || 0, i} }
                .map { |(person, _i)| person }

puts sorted.map(&.name)