On Oct 30, 10:35=A0am, Tim Ferrell <s0nsp... / gmail.com> wrote:
> I have an array of strings like so:
>
> =A0 Tuesday 12:00 AM
> =A0 Sunday 9:00 AM
> =A0 Tuesday 3:00 PM
> =A0 Friday 7:30 AM
> =A0 Wednesday 5:00 PM
>
> and I want the array sorted by day name and then time. Is it possible to
> do this without resorting to a two stage process?

Although you already have better answers specific to your needs, the
answer to this question is also yes:
class Array; def rand; self[ Kernel.rand(length) ]; end; end
Person =3D Struct.new( :first, :last, :age ) do
  def to_s; "#{last}, #{first} - #{age}"; end
end
FIRSTS =3D %w[ Gavin Lisa John Joe Jim Jill Bob Anne Zach Michael ]
LASTS  =3D %w[ Jones Smith Jackson ]
people =3D (0..40).map{ Person.new( FIRSTS.rand, LASTS.rand, rand
(60) ) }

# Name ascending, age descending
puts people.sort_by{ |who| [ who.last, who.first, -who.age ] }

#=3D> Jackson, Anne - 28
#=3D> Jackson, Anne - 22
#=3D> Jackson, Bob - 29
#=3D> Jackson, Bob - 9
#=3D> Jackson, Gavin - 54
#=3D> Jackson, Jim - 12
#=3D> Jackson, Jim - 9
#=3D> Jackson, Jim - 1
#=3D> Jackson, Joe - 47
#=3D> Jackson, John - 41
#=3D> Jackson, Lisa - 8
#=3D> Jackson, Zach - 38
#=3D> Jones, Anne - 52
#=3D> Jones, Bob - 48
#=3D> Jones, Bob - 15
#=3D> Jones, Bob - 6
#=3D> Jones, Gavin - 30
#=3D> Jones, Jill - 35
#=3D> Jones, Jim - 50
#=3D> Jones, Jim - 49
#=3D> Jones, Jim - 44
#=3D> Jones, Jim - 3
#=3D> Jones, Joe - 35
#=3D> Jones, Joe - 11
#=3D> Jones, Joe - 4
#=3D> Jones, John - 37
#=3D> Jones, John - 10
#=3D> Jones, Zach - 21
#=3D> Jones, Zach - 2
#=3D> Smith, Anne - 20
#=3D> Smith, Bob - 48
#=3D> Smith, Gavin - 4
#=3D> Smith, Jill - 56
#=3D> Smith, Jill - 39
#=3D> Smith, Jill - 25
#=3D> Smith, Jill - 2
#=3D> Smith, Jim - 7
#=3D> Smith, Joe - 49
#=3D> Smith, John - 44
#=3D> Smith, John - 29
#=3D> Smith, John - 28