2011-06-29 10 views
1

私は自分のプライオリティキューを作成しています。アイテムが所定の優先順位で挿入されている点では、一般的な優先キューではありません。むしろ、キューにアイテムを追加して優先度を高くすることができます(キューが5つあり、キュー1 =最高優先度、キュー5 =最低)。そのため、項目は最初はキュー1に追加されます。C#ネストされたプライベートクラス

このデータ構造のユーザーはnext()要素を取得できます。この要素は、私が興味を持っているいくつかの要素、つまり優先度に基づいて要素を返しますが、データ構造全体からデキューされません。ユーザは、next()への前回の呼び出しから返された項目の有効性にいくらかのフィードバックを提供し(例えば合格/不合格の結果)、それに基づいて項目を優先的に上または下に移動させます。基本的に、失敗する要素はあまり使われなくなり、あまりにも頻繁に失敗する要素を最終的に削除する仕組みがあります。

1)インターフェイスを改善するための提案はありますか?私はnext()呼び出しから要素を取得し、別の関数呼び出しでフィードバックを提供する必要はありません。国家が台無しになるほどの余裕があります。 (つまり、ユーザーが次の要素を取得する前に結果を報告しないなど...)。また、これをスレッドセーフにすることが望ましいでしょう。

2)興味のある要素をラップするプライベートネストされたクラスを使用しています。各要素に関連付けられているいくつかの属性(たとえば、合格/不合格数など)を追跡したい内部クラスから外部クラスメンバーにアクセスする方法があるかどうかを知るためには?

+2

ネストされたクラスは、クラスインスタンスへの参照を持っていれば、外部クラスのプライベートメンバーにアクセスできます。 – BrokenGlass

+0

オハイオ州クール、すべての内部クラスのインスタンスにオブジェクトへの参照を渡さずに方法があることを望んでいた。 – user623879

答えて

1

私は質問を正確に理解していますが、返されたフィードバックを待たずにnext()に何が間違っていますか?構造体のユーザーは、キューからnext()要素を取り出し、準備が整ったら要素のsubmitFeedback()を引き出します。一方、他のユーザーは非同期的にnext()要素も引き出す​​ことができます。待ち行列は、入ってくる呼び出しを処理します。これで問題が解決しない場合は、状態をより詳細に説明することができますか?

+0

+1:このやり方ではもう少しうまく聞こえます。すべての子供が親の内部を乱しているというOPの考えが好きかどうかはわかりません。 – NotMe

+0

これは私が今やっていることです。私はユーザからの統計トラッキングを抽象化したいので、私がしたのはcheckOut()とcheckIn()メソッドを作成することでした。ユーザがcheckOut()を呼び出すと、エレメントがキーであるハッシュテーブルに項目が追加され、ユーザが要素をチェックインしたときに簡単に参照できるように要素ラッパーにアクセスします(優先度を操作するフィードバック値とともに)。スレッドの安全性を確保するためにロックをいくつか入れていますが、本当に必要なのかどうかはわかりませんが、残念ながら安全です。私はこれをライブラリクラスと呼ぶべきではないかと思います。 – user623879

+0

ネストされたクラスに合意しました。私はこれを行う必要はありませんが、C#で方法があるかどうか疑問に思っていました。 JavaはOuterClass.this.memberと同様のものです。 – user623879

関連する問題