C# の並べ替えと OrderBy の比較 質問する

C# の並べ替えと OrderBy の比較 質問する

Sort または OrderBy を使用してリストを並べ替えることができます。どちらが高速ですか? どちらも同じアルゴリズムで動作していますか?

List<Person> persons = new List<Person>();
persons.Add(new Person("P005", "Janson"));
persons.Add(new Person("P002", "Aravind"));
persons.Add(new Person("P007", "Kazhal"));

1.

persons.Sort((p1,p2)=>string.Compare(p1.Name,p2.Name,true));

2.

var query = persons.OrderBy(n => n.Name, new NameComparer());

class NameComparer : IComparer<string>
{
    public int Compare(string x,string y)
    {
      return  string.Compare(x, y, true);
    }
}

ベストアンサー1

いいえ、同じアルゴリズムではありません。まず、LINQは次OrderByのように文書化されています。安定した(つまり、2 つの項目が同じ を持つ場合Name、元の順序で表示されます)。

また、クエリをバッファリングするか、複数回反復するかによっても異なります (LINQ-to-Objects は、結果をバッファリングしない限り、 ごとに並べ替えますforeach)。

クエリについてはOrderBy、次のものも使用したいと思うでしょう:

OrderBy(n => n.Name, StringComparer.{yourchoice}IgnoreCase);

(、またはの{yourchoice}いずれか)。CurrentCultureOrdinalInvariantCulture

List<T>.Sort

このメソッドは、QuickSort アルゴリズムを使用する Array.Sort を使用します。この実装では不安定なソートが実行されます。つまり、2 つの要素が等しい場合、その順序は保持されない可能性があります。対照的に、安定したソートでは、等しい要素の順序が保持されます。

Enumerable.OrderBy

このメソッドは安定したソートを実行します。つまり、2 つの要素のキーが等しい場合、要素の順序は保持されます。対照的に、不安定なソートでは、同じキーを持つ要素の順序は保持されません。ソート。つまり、2 つの要素が等しい場合、その順序は保持されない可能性があります。対照的に、安定したソートでは、等しい要素の順序が保持されます。

おすすめ記事