当前位置:编程学习 > C#/ASP.NET >>

c# queue类操作疑问

各位大侠,使用c#的queue类,可以peek()队列开头的一个元素。可是我如果想peek()队列开头的n个元素,该怎么做呢?是不是就不能用c#的queue类,而必须得自己写queue类了?c#有可以支持peek() n个元素的queue类么? --------------------编程问答-------------------- 请问你理解的队列是什么??? --------------------编程问答--------------------
引用 1 楼 zxz414644665 的回复:
请问你理解的队列是什么???
我的理解?就是队列是对象的先进先出,对象是一个个的进,一个个的出。但是没有限定一次只能进一个。比如我一次有100个对象到达并顺次入队,然后可能前50个对象满足某个特征,就可以这50个先一次性出队。这有什么不对吗? --------------------编程问答--------------------
引用 1 楼 zxz414644665 的回复:
请问你理解的队列是什么???
如果队列里有100个元素,但是前50个满足某个特征,我可能不定期的扫描一下这个队列,peek一下前n个数据,发现里面的m(m > n)个数据满足某些特征,这m个数据就可以出队了。但是我只有peek前n个数据,才可能判断m个数据满足某个特征,可以出队。
这种用法,在某些流式数据的帧格式判决上应用是非常多的,怎么还有疑问么? --------------------编程问答-------------------- --------------------编程问答-------------------- 那你只能自己写一个了。 --------------------编程问答--------------------
引用 4 楼 caozhy 的回复:
可以再借助一个stack,先让它们出队,再入队。
如果先出队再入队,就造成数据顺序乱了。我说一下我的实际应用吧:下位机不定期的发送log数据给PC软件。COM的每个log帧符合一定的格式,但是可能是断续的发到PC上,而且可能有误码(虽然概率很低,但是也需要考虑进去)。所以PC上必须首先能处理断续到达的COM帧(有先后顺序的,所以肯定要入PC的队列),PC收到一包数据数据后,开始检查队列,peek前面的n个数据,看是否是固定格式,如果符合某个固定格式,就从格式里解出帧长度并从队列里读出帧。所以必须peek前n个数据,才能判断是否有一帧完整的数据帧到达的。如果借住栈,那顺序就乱了。我以前是用c写了帧的解析类,转到c#,想能利用现成的呢。如果没有,可能在c#上自己写queue类了。 --------------------编程问答--------------------
引用
引用 1 楼 zxz414644665 的回复:
请问你理解的队列是什么???
如果队列里有100个元素,但是前50个满足某个特征,我可能不定期的扫描一下这个队列,peek一下前n个数据,发现里面的m(m > n)个数据满足某些特征,这m个数据就可以出队了。但是我只有peek前n个数据,才可能判断m个数据满足某个特征,可以出队。 这种用法,在某些流式数据的帧格式判决上应用是非常多的,怎么还有疑问么? 

那你就自己写一个了,附带一个我写的例子,供你参考,希望对你有帮助:
http://blog.csdn.net/zxz414644665/article/details/10977201 --------------------编程问答--------------------
引用 6 楼 shinerise 的回复:
Quote: 引用 4 楼 caozhy 的回复:

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


其实用一个List<T>就可以了。List<T>保证新插入的都在结尾,而你Remove开头的就相当于出队了。 --------------------编程问答--------------------
引用 8 楼 caozhy 的回复:
Quote: 引用 6 楼 shinerise 的回复:

Quote: 引用 4 楼 caozhy 的回复:

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


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


我觉得也是,有能够满足你需求的数据结构,就不用再去造轮子了。或者你再稍微封装一下就可以了。 --------------------编程问答-------------------- TO 楼主:

List<T> 可以满足你的要求,只不过,你需要每次取出第 N 个元素之后,把他 Remove 掉,你可以对 List<T> 做一层封装
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,