Home > Software engineering >  How I can sort below Array in jquery or .NET C#
How I can sort below Array in jquery or .NET C#

Time:11-05

How can I sort "YearMonth" text using Year & Month?

MyArray = ['2019APR', '2019AUG', '2019DEC', '2019FEB', '2019JAN',  
'2019JUL', '2019JUN', '2019MAR', '2019MAY', '2019NOV', '2019OCT',  
'2019SEP', '2020APR', '2020AUG', '2020DEC', '2020FEB', '2020JAN',  
'2020JUL', '2020JUN', '2020MAR', '2020MAY', '2020NOV', '2020OCT', '2020SEP']

Output Require

['2019JAN', '2019FEB', '2019MAR', '2019APR', '2019MAY', '2019JUN',  
'2019JUL', '2019AUG', '2019SEP', '2019OCT', '2019NOV', '2019DEC',  
'2020JAN', '2020FEB', '2020MAR', '2020APR', '2020MAY', '2020JUN',  
'2020JUL', '2020AUG', '2020SEP', '2020OCT', '2020NOV', '2020DEC']

I know Sort() will sort my array in alphabetical order but any optimal custom sort function for this?

I got Answer two Ans

JS I found myself using this way:- https://jsfiddle.net/51u9nb6c/2/

And for .NET c# I mark correct answer

CodePudding user response:

In c#, you can use the Array's Sort overload that takes an Array and a Comparison as arguments:

var arr = new[] { "2019APR", "2019AUG", "2019DEC", "2019FEB", 
                  "2019JAN", "2019JUL", "2019JUN", "2019MAR", 
                  "2019MAY", "2019NOV", "2019OCT", "2019SEP", 
                  "2020APR", "2020AUG", "2020DEC", "2020FEB", 
                  "2020JAN", "2020JUL", "2020JUN", "2020MAR", 
                  "2020MAY", "2020NOV", "2020OCT", "2020SEP" };

Array.Sort(arr, (a, b) => ConvertToDateTime(a).CompareTo(ConvertToDateTime(b)));

private DateTime ConvertToDateTime(string yyyyMMM) 
    => DateTime.ParseExact(
           yyyyMMM, 
           "yyyyMMM", 
           System.Globalization.CultureInfo.InvariantCulture);

Note: You don't have to use the ConvertToDateTime method, it's just a helper to avoid writing the exact same ParseExact call twice.

See a live demo on SharpLab (without the helper method)

CodePudding user response:

Simple :

            string[] MyArray = {"2019APR", "2019AUG", "2019DEC", "2019FEB", "2019JAN",
                "2019JUL", "2019JUN", "2019MAR", "2019MAY", "2019NOV", "2019OCT",
                "2019SEP", "2020APR", "2020AUG", "2020DEC", "2020FEB", "2020JAN",
                "2020JUL", "2020JUN", "2020MAR", "2020MAY", "2020NOV", "2020OCT", "2020SEP" };

            string[] sortedArray = MyArray.Select(x => new { s = x, date = DateTime.ParseExact(x, "yyyyMMM", System.Globalization.CultureInfo.InvariantCulture) })
                .OrderBy(x => x.date)
                .Select(x => x.s)
                .ToArray();
  • Related