リストを並べ替えたい: (2012-09, 2012-10,2012-11,2012-12,2013-01, 2013-02,2013-03,2013-04,2013-05, 2013-06,2013- 07,2013-08)
新しいリストに (2013-01、2013-02、2013-03、2013-04 など、2012-09、2012-10)
C#でこれを行うにはどうすればよいですか?
リストを並べ替えたい: (2012-09, 2012-10,2012-11,2012-12,2013-01, 2013-02,2013-03,2013-04,2013-05, 2013-06,2013- 07,2013-08)
新しいリストに (2013-01、2013-02、2013-03、2013-04 など、2012-09、2012-10)
C#でこれを行うにはどうすればよいですか?
リストが a のList<string>
場合、次のコードを使用できます
lst = lst.OrderByDescending(a => a.Substring(0, 4)).OrderBy(a => a.Substring(5, 2)).ToList();
IComparer の独自の実装を作成してこれに対処することができます。これにより、データ構造が変更された場合に保守性が向上する可能性があります。
これは、提供された例を操作するための大まかな例です。
public class MonthYearStringComparer : IComparer<string>
{
public int Compare(string x, string y)
{
if (x == null && y == null) return 0;
if (x == null) return -1;
if (y == null) return 1;
int[] xArray = x.Split('-').Select(xVal => int.Parse(xVal)).ToArray();
int[] yArray = y.Split('-').Select(yVal => int.Parse(yVal)).ToArray();
// x year is earlier
if (xArray[0] < yArray[0]) return 1;
// y year is earlier
if (xArray[0] > yArray[0]) return -1;
// years are same
// x month is earlier
if (xArray[1] < yArray[1]) return 1;
// y month is earlier
if (xArray[1] > yArray[1]) return -1;
// same
return 0;
}
http://msdn.microsoft.com/en-us/library/234b841s.aspx
次に、ソーターをインスタンス化し、それを sort メソッドのパラメーターとして使用するだけです。
MonthYearStringComparer comparer = new MonthYearStringComparer();
myListOfYearAndMonthStrings.Sort(comparer);