首先概述一下我正在尝试做的事情:
每次用户按下一个键时,我都会记录当前时间,一旦我有超过 5 条记录,我需要计算两次按键之间的平均时间(同时只保留最后 5 - 10 次按键)。
当我第一次坐下来看这个问题时,我想,很简单,我将使用堆栈并简单地使其少于 10 个项目。
问题:
- 如何确保堆栈中最多只有十个值? (日期时间类型)
- 如何找到存储在堆栈中的每个日期时间之间的平均时间?
谢谢
丹
最佳答案
不要使用Stack,而是使用容量有限的Queue。这可以通过类似的方式实现:
public class CappedQueue<T> : IEnumerable<T> {
private readonly m_Capacity;
private Queue<T> m_InnerQueue;
public CappedQueue<T>(int capacity) {
m_Capacity = capacity;
m_InnerQueue = new Queue<T>(capacity);
}
// Wrap required methods
public void Enqueue(T item){
if(m_InnerQueue.Count()) == capacity) {
m_InnerQueue.Dequeue() ;
}
m_InnerQueue.Enqueue(item);
}
public IEnumerator<T> GetEnumerator()
{
return m_InnerQueue.GetEnumerator();
}
}
public class Test {
public void Foo()
{
var queue = new CappedQueue<DateTime>(5);
queue.Enqueue(DateTime.Now); // each time the user press the key
queue.Enqueue(DateTime.Now); // each time the user press the key
queue.Enqueue(DateTime.Now); // each time the user press the key
TimeSpan diff = (queue.Last() / queue.Fisrt())/queue.Count();
}
public void Foo2()
{
var queue = new CappedQueue<int>(5);
queue.Enqueue(10);
queue.Enqueue(20);
queue.Enqueue(30);
var average = queue.Average(x=>x);
}
}
关于c# - 如何使用 C# Stack 对象保存日期时间值并计算平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11274706/