Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to sort a two-dimensional array (2d array) by date in ruby on rails?

I have a two dimensional array which has following structure

array = [
          ["2019-03-11","00986587","LBP"],
          ["2019-02-23","00462421","USD"],
          ["2019-05-26","00357853","EUR"],
          ["2019-09-15","00357382","LBP"]
        ]

I want to sort the array based on the date (first element of each row).

Looking for the following result:

array = [
          ["2019-09-15","00357382","LBP"],
          ["2019-05-26","00357853","EUR"],
          ["2019-03-11","00986587","LBP"],
          ["2019-02-23","00462421","USD"]
        ]

After my research on sort and sort_by i didn't find any solution. Can anyone please help me to solve my problem ? and thank you

like image 477
iamzouz Avatar asked Sep 14 '26 09:09

iamzouz


2 Answers

You can sort 2d arrays with sort_by method: sort_by sorts in ascending order by default. If you want it to be in descending order, just reverse the result.

array.sort_by{ |a| a.first }.reverse
like image 115
demir Avatar answered Sep 15 '26 21:09

demir


Two important notes:

  • your dates are written in YYYY-MM-DD format, so sorting them alphabetically will also sort them chronologically.
  • your dates are the first element in the arrays, and array are sorted by their first element first.

It means that all you need is:

array.sort.reverse
#=> => [["2019-09-15", "00357382", "LBP"], ["2019-05-26", "00357853", "EUR"], ["2019-03-11", "00986587", "LBP"], ["2019-02-23", "00462421", "USD"]]

If you want to save modify array in place, you can write:

array.sort!.reverse!
like image 40
Eric Duminil Avatar answered Sep 15 '26 23:09

Eric Duminil