天下之事,必先处之难,而后易之。

C# SortedDictionary排序结构测试

C# SortedDictionary-Dictionary,SortedList-List 这是两种不一样的数据结构,但是他们比较相似。Sorted*意为排序的,这里以SortedDictionary为例进行测试。

SortedDictionary

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AVParser.Data
{
    /// <summary>
    /// GB1078音视频帮助类
    /// </summary>
    public class GB1078AVHelper
    {
        /// <summary>
        /// 用于存储解析后的AV数据
        /// </summary>
        SortedDictionary<ulong, AV> sortedDictionary = new SortedDictionary<ulong, AV>();

        /// <summary>
        /// 设置AV数据
        /// </summary>
        /// <param name="av"></param>
        public void SetData(AV av)
        {
            sortedDictionary[av.Head.RTTimeSpan] = av;
        }

        /// <summary>
        /// 获取最大时间戳的AV
        /// </summary>
        /// <returns></returns>
        public AV GetMaxAV()
        {
            ulong maxKey = sortedDictionary.Keys.Max();
            AV av = sortedDictionary[maxKey];
            // 取走即清除
            sortedDictionary.Remove(maxKey);
            return av;
        }

        /// <summary>
        /// 获取最小时间戳的AV
        /// </summary>
        /// <returns></returns>
        public AV GetMinAV()
        {
            ulong minKey = sortedDictionary.Keys.Min();
            AV av = sortedDictionary[minKey];
            // 取走即清除
            sortedDictionary.Remove(minKey);
            return av;
        }
    }
}

Program

using AVParser.Parser;
using FFmpeg.AutoGen;
using JX;
using RTForwardServer;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Media;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace AVParser
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            

            Data.GB1078AVHelper helper = new Data.GB1078AVHelper();

            for(var i=10; i >= 1; i--)
            {
                JTRTHead head = new JTRTHead();
                head.RTTimeSpan =(ulong) i;
                AV av = new AV(AV.AVTYPE.MEDIA_AUDIO, head, new byte[0]);
                helper.SetData(av);
            }

            for (var i = 10; i >= 1; i--)
            {
                Console.WriteLine(helper.GetMinAV().Head.RTTimeSpan);
            }

            Console.ReadLine();

        }
    }
}

OutputInfo

1
2
3
4
5
6
7
8
9
10
注意事项:C#里面Dictionary的Add键不允许重复,会产生异常。

posted @ 2024-09-23 08:02  boonya  阅读(38)  评论(0)    收藏  举报  来源
我有佳人隔窗而居,今有伊人明月之畔。
轻歌柔情冰壶之浣,涓涓清流梦入云端。
美人如娇温雅悠婉,目遇赏阅适而自欣。
百草层叠疏而有致,此情此思怀彼佳人。
念所思之唯心叩之,踽踽彳亍寤寐思之。
行云如风逝而复归,佳人一去莫知可回?
深闺冷瘦独自徘徊,处处明灯影还如只。
推窗见月疑是归人,阑珊灯火托手思忖。
庐居闲客而好品茗,斟茶徐徐漫漫生烟。

我有佳人在水之畔,瓮载渔舟浣纱归还。
明月相照月色还低,浅近芦苇深深如钿。
庐山秋月如美人衣,画堂春阁香气靡靡。
秋意幽笃残粉摇曳,轻轻如诉画中蝴蝶。
泾水潺潺取尔浇园,暮色黄昏如沐佳人。
青丝撩弄长裙翩翩,彩蝶飞舞执子手腕。
香带丝缕缓缓在肩,柔美体肤寸寸爱怜。
如水之殇美玉成欢,我有佳人清新如兰。
伊人在水我在一边,远远相望不可亵玩。