我確定這很簡單,但它讓我難以置信。我希望簡化字母排序,但把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