0

ここにクラスがあります

Class Emp {
      String firstName;
      String lastName;
      int sal;
      -----------
}

ここには 100 人の従業員のリストがあり、給与と名字に基づいてオブジェクトを並べ替えたいと考えています。コレクションフレームワークを使用してこれを行うにはどうすればよいですか? 辞書の仕組みに関係していますか??

4

3 に答える 3

1

.NET には、タスクを実行するためのコレクションがいくつかあります。

リスト

すべてのエンティティを含むリストを作成し、メソッドで並べ替えることができますSort。給与でソートする方法の例 (フィールドがパブリックであると仮定):

List<Emp> empCollection= new List<Emp>
{
    new Emp { sal = 1000, firstName = "Chris", lastName = "Bakker" },
    new Emp { sal = 1500, firstName = "Bea", lastName = "Smith" },
    // etc.
};
empCollection.Sort((a,b) => a.sal.CompareTo(b.sal));

長所と短所:

  • 長所: コレクションを別のキーに再分類します。
  • 短所: リストはソートされていますが、キーで高速に検索することはできません。

並べ替えられた辞書

SortedDictionary を使用することもできます。ディクショナリは、キーと値の組み合わせです。あなたの場合、値は常に従業員になります。They キーは、アイテムを並べ替える要素です。名でソートする例:

SortedDictionary<string, Emp> empCollection= new SortedDictionary<string, Emp>
{
    {"Chris", new Emp { sal = 1000, firstName = "Chris", lastName = "Bakker" }},
    {"Bea", new Emp { sal = 1500, firstName = "Bea", lastName = "Smith" }},
    // etc.
};

長所と短所:

  • 長所: リストがソートされると、キーによるクエリは非常に高速になります。
  • 短所:重複データを追加しているように感じるキーを個別に追加する必要があります。
  • 短所: コレクションを別のキーに再分類することはできません。新しい辞書を作成する必要があります。

リンク

LINQ を使用して、新しく作成され、並べ替えられたリストを作成できます。

List<Emp> empCollection= new List<Emp>
{
    new Emp { sal = 1000, firstName = "Chris", lastName = "Bakker" },
    new Emp { sal = 1500, firstName = "Bea", lastName = "Smith" },
    // etc.
};
List<Emp> sortedEmpCollection = empCollection.OrderBy(e => e.lastName).ToList();

長所と短所:

  • 長所: 構文が理解しやすい。
  • 短所: 新しく作成されたリストが毎回作成されます (より多くのメモリ管理)。
  • 短所: リストはソートされていますが、キーで高速に検索することはできません。
于 2013-05-08T18:37:58.057 に答える
0

私はたまたまここでこれについてブログを書きました

それは本当に必要なものに依存しますが、辞書はタイプ セーフであるだけでなく、通常の HashTable よりも高速であるという点で最適であることがわかりました。ただし、コレクションには他にもさまざまなオプションがあります。いくつか例を挙げると、Lists と Arraylists があります (これらはもはやほとんど使用されていません)。MSDN には各タイプの例が多数ありますが、パフォーマンスを得るには、パフォーマンスだけがすべてではないため、少しググって自分で決定することをお勧めします。また、拡張性と、複合型またはプリミティブ型を使用するかどうかもあります。このシナリオでは複雑な型を使用しているように見えますが、それが全体的な目標ではない可能性があります。

また、変更通知や遅延読み込みなどが必要な場合は、IObservable コレクションや、IEnumerable の拡張機能である IQueryable などを参照してください。

あなたがソートについて最も関心を持っていることに気付きました。C# では、IQueryable を使用し、慣れている場合は LINQ を使用することをお勧めします。高速でオーバーヘッドがほとんどなく、何でもソートできます。

クラスを使用して、LINQ でできることのヒントを次に示します。

List<Emp> guy = new List<Emp>();

guy.Where(x => x.firstName == "George").OrderBy(x => x.lastName);

お役に立てれば

于 2013-05-08T17:19:04.667 に答える