的要求: 的 我有一个带有 n 元素的最大优先级队列。现在我想只保留 m - 最大元素(其中 m < = n )并将其余部分从队列中删除。换句话说,我想修剪队列。
我如何实现这一目标?
我能提出的一种方法是,将 m 元素出列并将它们放入另一个队列。然后将新队列的引用分配给旧队列的引用。
public static PriorityQueue<int> TrimPQueue(PriorityQueue<int> paraQueue, int newSize)
{
if (newSize >= paraQueue.Count)
return paraQueue;
PriorityQueue<int> newQueue = new PriorityQueue<int>(PriorityQueueType.Maximum);
for (int i = 1; i < newSize + 1; i++)
{
int temp = paraQueue.Dequeue();
newQueue.Add(temp);
}
return newQueue;
}
有没有更好的方法呢?我更喜欢是否有办法修剪工作队列,而不必创建新的队列对象。
答案 0 :(得分:1)
PriorityQueue实现IEnumerable接口,因此您可以将其与Linq扩展方法Last()结合使用:
while (paraQueue.Count > newSize)
{
paraQueue.Remove(paraQueue.Last());
}
答案 1 :(得分:0)
我会做这样的事情:
public static void TrimPQueue(PriorityQueue<int> paraQueue, int newSize)
{
if (newSize >= paraQueue.Count)
return ;
for (int i = 1; i < newSize + 1; i++)
paraQueue.Dequeue();
}
因为如果您仍在更改当前队列,则无需复制。