Sorting an array of arrays

I have an array of arrays. The first field of each contained array is a
date. The second field of each contained array is the corresponding day
of the week. I thought that it would be very easy to sort the outer
array on the dates like this:

myArray=[[“2013/09/09”,“Mon”],[“2013/09/14”,“Fri”],[“2013/09/11”,“Wed”]]
myArray.sort {|x,y| x[0] <=> y[0]}
puts(myArray.inspect)

It’s not working for me. Can someone please tell me what I’m missing?
Thanks for any help.

 ... doug

ary.sort won’t modify ary in-place.

Try this instead:

myArray=[[“2013/09/09”,“Mon”],[“2013/09/14”,“Fri”],[“2013/09/11”,“Wed”]]
sorted = myArray.sort { |x,y| x[0] <=> y[0] }
p sorted

You might also want to check out sort! vs sort.

I think you should try :

myArray=[[“2013/09/09”,“Mon”],[“2013/09/14”,“Fri”],[“2013/09/11”,“Wed”]]
myArray.sort! {|x,y| x[0] <=> y[0]}
puts(myArray.inspect)

notice, sort!

Carlos G

On Sep 22, 2013, at 01:51 PM, Doug J. [email protected] wrote:

I have an array of arrays. The first field of each contained array is a
date. The second field of each contained array is the corresponding day
of the week. I thought that it would be very easy to sort the outer
array on the dates like this:

myArray=[[“2013/09/09”,“Mon”],[“2013/09/14”,“Fri”],[“2013/09/11”,“Wed”]]
myArray.sort {|x,y| x[0] <=> y[0]}
puts(myArray.inspect)

It’s not working for me. Can someone please tell me what I’m missing?
Thanks for any help.

… doug

sort! is definitely the way to go. Thanks so much for the help. (I
should have been able to figure that out.) :slight_smile:

  ... doug

There’s always sort_by, as well.
myArray.sort_by! { |x| x[0] }

On Sun, Sep 22, 2013 at 8:51 PM, Doug J. [email protected]
wrote:

I have an array of arrays. The first field of each contained array is a
date.

No. It’s a String.

The second field of each contained array is the corresponding day
of the week. I thought that it would be very easy to sort the outer
array on the dates like this:

myArray=[[“2013/09/09”,“Mon”],[“2013/09/14”,“Fri”],[“2013/09/11”,“Wed”]]
myArray.sort {|x,y| x[0] <=> y[0]}
puts(myArray.inspect)

It’s not working for me. Can someone please tell me what I’m missing?
Thanks for any help.

Apart from using sort! you can use sort_by!

irb(main):012:0> a =
[[“2013/09/09”,“Mon”],[“2013/09/14”,“Fri”],[“2013/09/11”,“Wed”]]
=> [[“2013/09/09”, “Mon”], [“2013/09/14”, “Fri”], [“2013/09/11”, “Wed”]]
irb(main):013:0> a.sort_by! {|x| Date.parse(x[0])}
=> [[“2013/09/09”, “Mon”], [“2013/09/11”, “Wed”], [“2013/09/14”, “Fri”]]
irb(main):014:0> a
=> [[“2013/09/09”, “Mon”], [“2013/09/11”, “Wed”], [“2013/09/14”, “Fri”]]

But I’d rather make Date elements part of the Array. Then you have
the proper representation of the data. String is just for input and
output.

Kind regards

robert

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs