我确定这很简单,但它让我难以置信。我希望简化字母排序,但把Ds放在As和Bs之间。我想我想要一个自定义的IComparer来做到这一点。我如何使用.NET中的IComparer更改排序顺序
我该如何完成这个IComparer实现来传递我的声明? IComparer文档说,如果x是< y,返回小于0,但这是否重要多少小于零?抓我的头。
private static void Main(string[] args)
{
var letters = new List<string> { "A2", "E", "B1", "A1", "D", "C", "B2" };
var sorted = new List<string> { "A1", "A2", "D", "B1", "B2", "C", "E" };
letters.Sort(new MyComparer());
Assert.IsTrue(letters.SequenceEqual(sorted));
}
/// <summary>
/// Sorts D between A and B
/// </summary>
private class MyComparer : IComparer<string>
{
public int Compare(string x, string y)
{
if (string.Equals(x, "D"))
{
// return what?
}
return string.CompareOrdinal(x, y);
}
}
谢谢你们!我认为这是对的。我可以详细说明一下吗?比方说,我希望我的所有“N/A”都是在空字符串之后,但在任何其他字母字符串之前。 – GaryB96 2013-03-22 19:55:09
@ GaryB96:那么你可能会遇到特殊的“N/A”,检查它是否与“”相同,并返回-1作为其他任何事情。你添加的规则越多,它就越乱 – 2013-03-22 20:23:32