You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何创建存储int[]的PriorityQueue并以数组首元素为比较依据

C# 实现按int数组首元素排序的PriorityQueue

你要实现存储int[]类型、以数组第一个元素为优先级判定依据的优先队列,对应C#实现如下:

实现方案1:直接使用.NET 6+ 内置PriorityQueue(最简便)

.NET 6 及以上版本提供了内置的PriorityQueue<TElement, TPriority>类型,默认是小顶堆(优先级数值越小越先出队,和Java默认PriorityQueue行为一致),你可以直接指定优先级为int类型,入队时取数组首元素作为优先级传入即可:

// 初始化队列:元素类型为int[],优先级类型为int
PriorityQueue<int[], int> pq = new PriorityQueue<int[], int>();

// 入队示例
int[] a = new int[]{2, 7, 9};
int[] b = new int[]{1, 3, 4};
int[] c = new int[]{3, 5, 2};
pq.Enqueue(a, a[0]);
pq.Enqueue(b, b[0]);
pq.Enqueue(c, c[0]);

// 出队顺序:b(首元素1) -> a(首元素2) -> c(首元素3)
while(pq.Count > 0)
{
    int[] cur = pq.Dequeue();
    Console.WriteLine($"当前出队数组首元素:{cur[0]}");
}

实现方案2:自定义比较器,无需手动传入优先级

如果你希望和Java写法一致,入队时只需要传数组、不需要单独指定优先级,可以自定义比较器实现:

// 自定义数组比较器:按数组首元素排序
public class ArrComparer : IComparer<int[]>
{
    public int Compare(int[]? x, int[]? y)
    {
        // 空值排序规则可根据业务需求调整
        if (x == null && y == null) return 0;
        if (x == null) return -1;
        if (y == null) return 1;
        // 升序(小顶堆),要改成大顶堆只需调换x和y的比较顺序:return y[0].CompareTo(x[0]);
        return x[0].CompareTo(y[0]);
    }
}

// 初始化队列时传入自定义比较器
PriorityQueue<int[], int[]> pq = new PriorityQueue<int[], int[]>(new ArrComparer());

// 入队直接传入数组即可
pq.Enqueue(a, a);
pq.Enqueue(b, b);
pq.Enqueue(c, c);

说明:如果你的项目使用的是.NET 6以下版本,没有内置优先队列实现,可以自行基于小顶堆/大顶堆数据结构实现优先队列,或引入兼容低版本的第三方优先队列包。

对应Java实现参考截图:
Java PriorityQueue参考实现

内容的提问来源于stack exchange,提问作者Violet Evergarden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 02:03:24