これは簡単だと思いますが、困惑しています。単純化して、アルファベットを並べ替えたいのですが、A と B の間に D を入れます。これを行うには、カスタム IComparer が必要だと思います。
アサーションを渡すには、この IComparer の実装をどのように仕上げればよいでしょうか? IComparer のドキュメントには、x が < y の場合は 0 未満を返すと書かれていますが、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);
}
}