问题是关于overzelaous执行情况的个
-
29-08-2019 - |
题
我有一个优先排队执行在C#我想添加一个。个方法。
然而,由于优先权的队列并不真正关心本身与订单的价值本身(即,如果我们只是抓住所有的价值观,无视他们的优先事项,他们不一定有任何顺序在所有),只有优先权的他们,我没有任何标准的一般T类型的优先权排队,那就是,我不要指定他们需要有一些固有的顺序,或者 可比性.
因此,当我来到实施 .IndexOf(T value)
我有一个小问题。
是否有一个标准在什么,/我应该如何实现这个吗?我的初步想法只是使用 EqualityComparer<T>.Default
图,如果我们发现的 value
或者没有,但是还有很多类似这样的类型,这些天。
例如,这里什么我想到了盖住我的基础,但是这似乎矫枉过正:
public Int32 IndexOf(T value)
(境内的电话一个人有ClassThatImplementsInterface.Default
)public Int32 IndexOf(T value, IComparer<T> comparer)
public Int32 IndexOf(T value, IEqualityComparer<T> comparer)
public Int32 IndexOf(T value, IEquatable<T> comparer)
public Int32 IndexOf(T value, Predicate<T> predicate)
你是做什么的?标志这既是主观的,维基,因为这更多的是一个民意调查,比其他任何东西。
在重新阅读我自己的问题我想我可能只使用一个没有一个比较器,然后添加所谓的版本,这种方式的用户的此类可以叫任何东西。
还注意到,我也可以做 pq[index]
抓住一个项目,其中包含的优先权和价值本身,因此我还可以得到通过,没有个在所有,但是我也有方法可说 改变优先权的价值X的优先P, 这将需要某种形式的个/搜索内部。因此我也想避免具有无数重载的所有这些方法。
应对评论:是的,队列的优先级是基于一堆。
基本上,这两类的定义是这样的:
public class Heap<T> : IEnumerable<T>, ICloneable { ... }
public class PriorityQueue<T> : Heap<PriorityQueueElement<T>> { ... }
PriorityQueueElement是一个简单的不可改变的结构与优先权和价值的性质。
应对即将进行的评论:由于优先权的队列是根据一堆,"有趣酒店",通过改变优先权的价值通过其指数之后,价值不一定是在那个索引。我打算仅仅是文件,这为在一些情况下,我预见到需要独立定位/变化的优先行动。
解决方案
我会做的比较一个构造可选择的参数;这是相媲美的东西怎么样 Dictionary<,>
, SortedList<,>
等等,可以指定所比较的机制。
是否接受 IComparer<T>
或 IEqualityComparer<T>
取决于你是否会对数据进行排序,或只是寻找一个平等相匹配;如果匹配,然后你需要的东西喜欢 IEqualityComparer<T>
.不幸的是,由于这2种方法(GetHashCode()
和 Equals()
)没有直接委托的版本的这个,也许除了 Predicate<T>
或 Func<T,T,bool>
.
为默认构造,我想通的 [Equality]Comparer<T>.Default
.