Dan*_*Tao 8 .net c# vb.net queue collections
假设我有一个滚动的值集合,我指定集合的大小,并且每当添加新值时,超出此指定大小的任何旧值都将被删除.显然(我已经测试了这个)用于此行为的最佳集合类型是队列:
myQueue.Enqueue(newValue)
If myQueue.Count > specifiedSize Then myQueue.Dequeue()
Run Code Online (Sandbox Code Playgroud)
但是,如果我想计算队列中第一个和最后一个项目之间的差异怎么办?显然我无法通过索引访问项目.但是,从队列切换到实现IList的东西看起来有点矫枉过正,就像写一个新的类Queue类一样.现在我有:
Dim firstValue As Integer = myQueue.Peek()
Dim lastValue As Integer = myQueue.ToArray()(myQueue.Count - 1)
Dim diff As Integer = lastValue - firstValue
Run Code Online (Sandbox Code Playgroud)
那个叫ToArray()
我困扰的电话,但是一个更好的选择不会来找我.有什么建议?
Jul*_*iet 13
对我来说,如果您需要快速访问列表中的第一项,那么您使用的是错误的数据结构.切换一个LinkedList,它方便地具有First和Last属性.
请确保仅使用AddLast和RemoveFirst向链接列表添加和删除项目以维护Queue属性.为防止自己无意中违反Queue属性,请考虑在链接列表周围创建一个包装类,并仅显示队列中所需的属性.
public class LastQ<T> : Queue<T>
{
public T Last { get; private set; }
public new void Enqueue(T item)
{
Last = item;
base.Enqueue(item);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:显然,这个基本类应该更加健壮,可以保护空队列中的Last属性.但这应该足够基本的想法.
归档时间: |
|
查看次数: |
21658 次 |
最近记录: |