【发布时间】:2019-07-13 04:41:44
【问题描述】:
我想编写一个排序逻辑来将以下字符串排序为自定义类的输出:-
现在输出:- 3m_20,2m_20,1m_20,10d_20,5d_20,0d_20,0d_0,5d_0,10d_0,1m_0,2m_0,3m_0
所需的输出 0d_0,0d_20,5d_0,5d_20,10d_0,10d_20,1m_0,1m_20,2m_0,2m_20,3m_0,3m_20
我发现很难以上述方式进行排序。请帮助我如何根据需要进行排序?
我尝试使用 IComparable 根据“Id”对其进行排序,但它是根据第一个字符进行排序的。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace Rextester
{
public class Program
{
public static void Main(string[] args)
{
DateDefinition d1 = new DateDefinition { Horizon = "0d",Days=20};
DateDefinition d1_0 = new DateDefinition { Horizon = "0d",Days=0};
DateDefinition d2 = new DateDefinition { Horizon = "5d",Days=20};
DateDefinition d2_0 = new DateDefinition { Horizon = "5d",Days=0};
DateDefinition d3 = new DateDefinition { Horizon = "10d",Days=20};
DateDefinition d3_0 = new DateDefinition { Horizon = "10d",Days=0};
DateDefinition d4 = new DateDefinition { Horizon = "1m",Days=20};
DateDefinition d4_0 = new DateDefinition { Horizon = "1m",Days=0};
DateDefinition d5 = new DateDefinition { Horizon = "2m",Days=20};
DateDefinition d5_0 = new DateDefinition { Horizon = "2m",Days=0};
DateDefinition d6 = new DateDefinition { Horizon = "3m",Days=20};
DateDefinition d6_0 = new DateDefinition { Horizon = "3m",Days=0};
var definitions = new List<DateDefinition> {d6,d5,d4,d3,d2,d1,d1_0,d2_0,d3_0,d4_0,d5_0,d6_0};
definitions.Sort();
foreach(var d in definitions)
{
Console.WriteLine(d.Id);
}
}
}
public class DateDefinition : IComparable<DateDefinition>
{
public string Horizon { get; set; }
public int Days { get; set; }
public string Id
{
get { return Horizon + "_" + Days.ToString(); }
}
public int CompareTo(DateDefinition other)
{
if (ReferenceEquals(other, this)) return 0;
if(ReferenceEquals(other,null)) return -1;
return string.Compare(Id,other.Id, StringComparison.InvariantCultureIgnoreCase);
}
}
}
输出到上述代码:-
0d_0 0d_20 10d_0 10d_20 1m_0 1m_20 2m_0 2m_20 3m_0 3m_20 5d_0 5d_20
需要这样的输出:-
0d_0 0d_20 5d_0 5d_20 10d_0 10d_20 1m_0 1m_20 2m_0 2m_20 3m_0 3m_20
重要提示:请注意上述上下文中的 d=days , m=months
【问题讨论】: