2011-06-29 84 views
1

我正在創建我自己的排序優先級隊列。這不是一個典型的優先級隊列,因爲項目是以給定優先級插入的。相反,項目可以添加到隊列中,並且它們從最高優先級開始(假設我們有5個隊列,隊列1 =最高優先級,隊列5 =最低)),因此該項目最初被添加到隊列1。C#嵌套私有類

此數據結構的用戶可以獲取next()元素,該元素根據我感興趣的某些因素(即優先級)返回元素,但不會從整個數據結構中出列。用戶對前一次調用next()返回的項目的有效性(例如,通過/失敗結果)提供一些反饋,並基於該反饋優先向上或向下移動項目。基本上,失敗的元素使用得較少,而且我有機制最終移除失敗次數過多的元素。

1)任何改善界面的建議?我不喜歡從next()調用中檢索元素,然後通過另一個函數調用提供反饋。狀態混亂的地方有太多的錯誤空間。 (即用戶在獲取下一個元素之前不報告結果..等等)。此外,它是可取的讓這是線程安全的。

2)我正在使用一個私有嵌套類來包裝我感興趣的元素以及與每個元素相關的一些屬性以跟蹤元素的統計信息(例如通過/失敗計數等),並且希望瞭解是否有辦法從內部階層進入外部班級成員?

+2

嵌套類可以訪問外部類的私有成員,只要它具有對類實例的引用即可。 – BrokenGlass

+0

哦,很酷,希望有一種方法,而不是將對象的引用傳遞給所有內部類實例。 – user623879

回答

1

不確定我確切地理解了這個問題,但next()不等待返回的反饋有什麼問題?結構的用戶將next()元素從隊列中取出,然後在元素準備好時對元素提交feedFeedback()。與此同時,其他用戶也可以異步地取出下一個()元素。隊列在進入時處理調用。如果這樣做沒有幫助,您能否更詳細地解釋處理狀態的問題?

+0

+1:這種方式聽起來更加健全。我不確定我是否喜歡OP的想法,讓所有的孩子都搞亂父母的內部。 – NotMe

+0

是的,這是我現在正在做的。我想抽象用戶的統計跟蹤,所以我做的是創建checkOut()和checkIn()方法。當用戶調用checkOut()時,該項目被添加到一個散列表中,該元素作爲訪問元素包裝的關鍵,以便在用戶檢查元素時(以及一些反饋值來操縱優先級)輕鬆查找。我還加了一些鎖,以確保線程安全,不確定我是否真的需要它們,但是比對不起更安全。我想我應該稱之爲一個庫類哈哈... – user623879

+0

同意在嵌套類,我不需要這樣做,但只是想知道是否有一種方式在C#中...我認爲有Java與OuterClass.this.member或類似的東西。 – user623879