8

間隔で構成されるデータ構造を作成しました。データ構造には当然、すべての間隔を列挙する列挙子が必要ですが、間隔を異なる順序で列挙する 2 つの異なる列挙子を公開したいと考えています。

列挙子の 1 つは間隔を非常に高速に列挙しますが、その順序はいくぶん恣意的です。もう 1 つは、それらを辞書順に列挙しますが、少し遅くなります (ただし、間隔によって異なります)。達成しようとしていることに応じて、一方の列挙子が他方よりも優先される場合があります。

たとえば、 foreach ループで使用する列挙子をユーザーが決定できるようにする方法はありますか? そうでない場合は、列挙子を切り替えるために使用するプロパティを簡単に作成するか、コンストラクターが追加のパラメーターを受け取ることができます。しかし、利便性よりも混乱を招くのではないかと心配しています。

むしろ、他の列挙子については、IEnumerator を返す別のメソッドを作成する必要がありますか? このちょっと変わった問題のベストプラクティスはありますか?

4

1 に答える 1

14

異なる列挙子を返す 2 つのプロパティを公開することは、おそらく正しい方法です。それ自体を実装するデータ構造の代わりにIEnumerable(私はそれを推測しています)、2 つの異なるIEnumerator実装を作成し、それぞれのメイン クラスからプロパティを公開します。次に、コードの使用は簡単です。

foreach( var item in data.FastEnumerator )
{
    ....

foreach( var item in data.LexicalEnumerator )
{
    ....
于 2013-07-20T07:31:08.433 に答える