Я просеиваю некоторые из моих старых ошибок и, просматривая какой-то неприятный код, я понял, что мой алгоритм усреднения или сглаживания был довольно плохим.Я провел небольшое исследование, которое привело меня к «среднему значению» - имеет смысл, довольно просто.Я размышлял над возможной реализацией и понял, что не знаю, какая коллекция обеспечит тот тип «скользящей» функциональности, которая мне нужна.Другими словами, мне нужно нажать / добавить элемент в конец коллекции, а затем также добавить / удалить первый элемент из коллекции.Я думаю, что если бы я знал, как это называется, я мог бы найти правильную коллекцию, но я не знаю, что искать.
В идеале это коллекция, в которой вы устанавливаете максимальный размер и все, что добавляется к нему, которое превышает этот размер.выскочил бы первый элемент.
Чтобы проиллюстрировать, вот что я придумал, пока возился:
using System;
using System.Collections.Generic;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
LinkedList<int> samples = new LinkedList<int>();
// Simulate packing the front of the samples, this would most like be a pre-averaged
// value from the raw samples
for (int i = 0; i < 10; i++)
{
samples.AddLast(0);
}
for (int i = 0; i < 100; i++)
{
// My attempt at a "sliding collection" - not really sure what to call it but as
// an item is added the first item is removed
samples.RemoveFirst();
samples.AddLast(i);
foreach (int v in samples)
{
Console.Write("{0:000} ", v);
}
Console.WriteLine(String.Empty);
}
Console.ReadLine();
}
}
}
Как вы можете видеть, я вручную обрабатываю удаление первого элемента,Я просто спрашиваю, существует ли стандартная коллекция, оптимизированная для этого типа использования?