修剪 NGenerics PriorityQueue

问题描述 投票:0回答:1

要求: 我有一个带有 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;
} 

没有更好的方法吗?我希望有一种方法可以修剪工作队列,而不必创建新的队列对象。

c# priority-queue
1个回答
1
投票

PriorityQueue 实现了 IEnumerable 接口,因此您可以将其与 Linq 扩展方法 Last() 结合使用:

while (paraQueue.Count > newSize)
{
  paraQueue.Remove(paraQueue.Last());
}
© www.soinside.com 2019 - 2024. All rights reserved.