2011-06-24 6 views
1

Hashtableのデータをコレクションに追加されたオブジェクトのプロパティでソートする必要があります。どうやってするか?私のプロジェクトでは.NET 2.0を使用しているため、.NET 2.0ランタイムではデフォルトで動作しない機能は使用できません(.NET 2.0で動作するC#3.0機能の一部を使用することができます任意の新しいdll)。ハッシュテーブルに追加されたオブジェクトはすべて同じ型です。 SortedListを使用してコンストラクタを介してHashtableを渡すと、キーだけでソートされます。カスタムソートロジックを渡す方法はありますか?Hashtableのカスタムソート(キーではない)

答えて

3

.NET 2.0にバインドされている場合は、IComparerを使用できます。 http://codebetter.com/davidhayden/2005/02/27/implementing-icomparable-for-sorting-custom-objects/

ハッシュテーブルは、何かを並べ替える場合は間違ったデータ構造です。

+0

私はIComparerを使うことができると知っていましたが、どうやってHashtableに渡すことができるのか分かりませんでした。とにかく、私は今、Hashtableの "Values"コレクションをそのコンストラクタに渡し、 "IComparer"の実装をarraylistの "Sort"メソッドに渡すことによって、arraylistを作成することによって解決しました。ありがとう。 – RKP

0

@SnoopyはIComparerを言った、それは本当に必要なものです。 SortedDictionaryをご覧ください。

0

ハッシュテーブルのdrawbacksをご覧ください。次に、利点を見て、適切なデータ構造を使用しているかどうかを判断します。ごくまれにソートすると、適切なデータ構造を使用している可能性があります。この場合、ソートには値を列挙してリストに入れる必要があります。頻繁にソートする場合は、search treeのような別のデータ構造に移行することを検討してください。まれにルックアップや検索を行う場合は、普通のリストを使うことを検討します。

0

一つの選択肢、あなたはハッシュテーブルの内容から、ソートされたリストを作成するに固執したい場合は、たIComparerのサブクラスを作成し、必要に応じてCompareメソッドをオーバーロードし、使用してソートされたリストを作成することです:

SortedList s = new SortedList(new MyIComparer());

次に、Hashtableの要素をリストに追加します。

関連する問題