0

オブジェクトのリストがある .NET 2.0 (LINQ が恋しい - A LOT) でこの素晴らしい割り当てがあります。これらのオブジェクトは API から取得するため、インターフェイスを追加できません。

次のようなものでそれらを並べ替える必要があります。

  • タイトルのAZ
  • タイトルのZA
  • ある日付の最新
  • ある日付で最も古い
  • 他のテキスト文字列の AZ

したがって、私は通常笑って .OrderBy(c=>c.MyTitle) と言いますが、あなたが通常それをどのように行うかは疑問です。

昔は .Sort() メソッドを使用していたのを覚えていますが、私が覚えている限りでは、IComparable インターフェイスを実装する必要がありました。これはここでは不可能です。

100 未満のアイテムで作業しており、Page_Load イベント (Web フォーム) で発生するため、速度は関係ありません。

あなたは私が何をすることをお勧めしますか? いくつかのカスタム ソート アルゴリズムを作成しますか (おそらく InsertionSort と同じくらい悪いものでも)? 昔の人々はどのようにこれを行っていたのですか?

4

3 に答える 3

1

Lists は 2.0 にまだ存在していた を取得する 2.0 のbackSort method持っていました。(「ここでは不可能」とは、それができない別の理由があることを意味する場合を除きます。その場合は、申し訳ありません!)IComparer<T>

于 2013-06-06T08:21:33.293 に答える
1

次の 2 つのオーバーロードのいずれかを使用できます。

  1. を受け取るオーバーロードComparison<T>、これは基本的にはFunc<T, T, int>
  2. IComparer<T>;を取るオーバーロード

最初のオーバーロードを使用して、タイトルの昇順で並べ替えると、次のようになります ( MSDNから借用:

list.Sort(CompareTitle);

public int CompareTitle(YourItem x, YourItem y)
{
    if (x == null)
    {
        if (y == null)
        {
            // If x is null and y is null, they're
            // equal. 
            return 0;
        }
        else
        {
            // If x is null and y is not null, y
            // is greater. 
            return -1;
        }
    }
    else
    {
        // If x is not null...
        //
        if (y == null)
            // ...and y is null, x is greater.
        {
            return 1;
        }
        else
        {
            return x.Title.CompareTo(y.Title);
        }
    }
}
于 2013-06-06T08:22:55.113 に答える
1

どうやら、net 2.0 のさまざまなタイプの構造体の回答済み並べ替えリストとして、比較のためにカスタム デリゲートで並べ替えを使用できるようです。

于 2013-06-06T08:22:57.667 に答える