-1

リストを並べ替えたい: (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#でこれを行うにはどうすればよいですか?

4

4 に答える 4

0

リストが a のList<string>場合、次のコードを使用できます

lst = lst.OrderByDescending(a => a.Substring(0, 4)).OrderBy(a => a.Substring(5, 2)).ToList();
于 2013-09-19T13:13:11.090 に答える
0

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);
于 2013-09-19T13:46:27.850 に答える