如何在jquery或.NET C#中对数组进行排序

mspsb9vt  于 11个月前  发布在  jQuery
关注(0)|答案(2)|浏览(111)

如何使用Year & Month对“YearMonth”文本进行排序?

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']

字符串

输出要求

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


我知道Sort()会按字母顺序排序我的数组,但有什么最佳的自定义排序函数吗?
我得到了答案二
JS我发现自己使用这种方式:-https://jsfiddle.net/51u9nb6c/2/
对于.NET C#,我标记正确答案

ljo96ir5

ljo96ir51#

在c#中,可以使用Array的Sort重载,它将Array和Comparison作为参数:

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);

字符串
注意:您不必使用ConvertToDateTime方法,它只是一个帮助器,以避免两次编写完全相同的ParseExact调用。
查看SharpLab上的实时演示(没有helper方法)

zbwhf8kr

zbwhf8kr2#

很简单:

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();

字符串

相关问题