2011-06-29 86 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