各位大侠,使用c#的queue类,可以peek()队列开头的一个元素。可是我如果想peek()队列开头的n个元素,该怎么做呢?是不是就不能用c#的queue类,而必须得自己写queue类了?c#有可以支持peek() n个元素的queue类么?

解决方案 »

  1.   

    如果队列里有100个元素,但是前50个满足某个特征,我可能不定期的扫描一下这个队列,peek一下前n个数据,发现里面的m(m > n)个数据满足某些特征,这m个数据就可以出队了。但是我只有peek前n个数据,才可能判断m个数据满足某个特征,可以出队。
    这种用法,在某些流式数据的帧格式判决上应用是非常多的,怎么还有疑问么?
      

  2.   

    如果先出队再入队,就造成数据顺序乱了。我说一下我的实际应用吧:下位机不定期的发送log数据给PC软件。COM的每个log帧符合一定的格式,但是可能是断续的发到PC上,而且可能有误码(虽然概率很低,但是也需要考虑进去)。所以PC上必须首先能处理断续到达的COM帧(有先后顺序的,所以肯定要入PC的队列),PC收到一包数据数据后,开始检查队列,peek前面的n个数据,看是否是固定格式,如果符合某个固定格式,就从格式里解出帧长度并从队列里读出帧。所以必须peek前n个数据,才能判断是否有一帧完整的数据帧到达的。如果借住栈,那顺序就乱了。我以前是用c写了帧的解析类,转到c#,想能利用现成的呢。如果没有,可能在c#上自己写queue类了。
      

  3.   

    那你就自己写一个了,附带一个我写的例子,供你参考,希望对你有帮助:
    http://blog.csdn.net/zxz414644665/article/details/10977201
      

  4.   


    其实用一个List<T>就可以了。List<T>保证新插入的都在结尾,而你Remove开头的就相当于出队了。
      

  5.   


    其实用一个List<T>就可以了。List<T>保证新插入的都在结尾,而你Remove开头的就相当于出队了。我觉得也是,有能够满足你需求的数据结构,就不用再去造轮子了。或者你再稍微封装一下就可以了。
      

  6.   

    TO 楼主:List<T> 可以满足你的要求,只不过,你需要每次取出第 N 个元素之后,把他 Remove 掉,你可以对 List<T> 做一层封装