0

プロパティをMyObject含むクラスがありますCreationDate As Date

並べ替えを取得するための最良の方法は何CreationDate List(Of MyObject)ですか?

より迅速な方法と最もパフォーマンスの高い方法。

4

3 に答える 3

4

LINQ を使用すると、次のように使用できます。

Dim sorted = unsorted.OrderBy(Function(x) x.CreationDate) _
                     .ToList()

編集: 既に持っている場合は、カスタム比較子List(Of T)でインプレース メソッドを使用できます。Sortその方が早いかもしれません。そうではないかもしれません。パフォーマンスに大きな違いがある可能性は低いと思いますが、これは気にする必要があります。

経験則として、次のことをお勧めします。

  • 「適切な」パフォーマンスを構成するものを見つけ出す
  • 最も読みやすい方法でコードを記述します (これは、カスタム比較子 (IMO) ではなく LINQ である可能性が高い)
  • そのコードを測定する
  • 速度が十分でない場合は、別の方法を試して測定してください。パフォーマンスの違いと可読性/保守性の違いを比較してください。
于 2012-09-20T18:35:06.940 に答える
3

リストにはソート方法があります。1 つのオーバーロードで比較を指定できます

unsorted.Sort(Function(x, y) x.CreationDate.CompareTo(y.CreationDate))
于 2012-09-20T18:44:52.657 に答える
0

インターフェイスを実装し、そのメソッドIComparerを定義して、オブジェクトCompareの日付を確認できます。MyObject

public class MyObjectComparer<T> : IComparer<T>
{
    public int Compare(MyObject firstObject, MyObject secondObject)
    {
        return firstObject.CreationDate.Compare(secondObject.CreationDate);
    }
}

注:私はあなたCreationDateがタイプであると仮定しましDateTimeたが、必要に応じて比較機能を実装できます。

次に、Comparer に従ってリストを並べ替えるには、次のようにします。

myListObject.Sort(new MyObjectComparer<MyObject>());
于 2012-09-20T18:42:07.973 に答える