C# 用于创建'的本机数组、堆栈、ArrayList或列表;低通';滤波器

C# 用于创建'的本机数组、堆栈、ArrayList或列表;低通';滤波器,c#,arrays,unity3d,arraylist,C#,Arrays,Unity3d,Arraylist,尝试创建一种低通滤波器,我不断平均前10个浮点值。不确定是使用内置数组(本机.NET数组)、.NET堆栈运算符,还是ArrayList或List 在伪代码中,我需要 1-定义包含10个浮点数的数组或堆栈 2-每次更新都会向数组、堆栈和列表推送一个新值 3-检查长度,如果大于10,则从数组、堆栈和列表中删除第一个或最早的浮点值 4-获取数组、堆栈和列表中所有浮点值的平均值 5-重复步骤2-4 第一个问题我应该使用内置数组、堆栈、ArrayList还是列表?我注意到在堆栈文档中没有从堆栈中删除最旧(

尝试创建一种低通滤波器,我不断平均前10个浮点值。不确定是使用内置数组(本机.NET数组)、.NET堆栈运算符,还是ArrayList或List

在伪代码中,我需要

1-定义包含10个浮点数的数组或堆栈

2-每次更新都会向数组、堆栈和列表推送一个新值

3-检查长度,如果大于10,则从数组、堆栈和列表中删除第一个或最早的浮点值

4-获取数组、堆栈和列表中所有浮点值的平均值

5-重复步骤2-4

第一个问题我应该使用内置数组、堆栈、ArrayList还是列表?我注意到在堆栈文档中没有从堆栈中删除最旧(底部)项的方法,但可能我遗漏了一些东西

我需要的是(仅Javascript)数组类的所有功能,但在C#中除外

第二,任何人都可以使用这两种方法来帮助理解实际语法吗?感谢您的帮助

堆栈是后进先出(后进先出)

如果要删除最旧的值,则需要使用队列(先进先出)

堆栈是后进先出(后进先出)

如果要删除最旧的值,则需要使用队列(先进先出)

您可以使用泛型集合来存储值:

var queue = new Queue<float>();
queue.Enqueue(1.0f); // pushes new item
queue.Dequeue(); // removes oldest item
您可以使用泛型集合来存储值:

var queue = new Queue<float>();
queue.Enqueue(1.0f); // pushes new item
queue.Dequeue(); // removes oldest item

您可能错过了队列数据结构。使用它,您可以将新元素放在末尾,并从前面删除旧元素

此外,如果经常有10个元素,则不需要查看数组中的所有元素来计算平均值。知道以前的平均值后,可以按如下方式计算新的平均值:

newAvg = oldAvg + (newElem - deletedElem)/10;
或者更简短地说:

avg += (newElem - deletedElem)/10;

您可能错过了队列数据结构。使用它,您可以将新元素放在末尾,并从前面删除旧元素

此外,如果经常有10个元素,则不需要查看数组中的所有元素来计算平均值。知道以前的平均值后,可以按如下方式计算新的平均值:

newAvg = oldAvg + (newElem - deletedElem)/10;
或者更简短地说:

avg += (newElem - deletedElem)/10;
从OP的步骤#3开始,队列听起来像是以0个元素开始的,这意味着队列中不会总是有10个元素,但我同意队列是正确的数据结构。从OP的步骤#3开始,队列听起来像是以0个元素开始的,这意味着队列中不会总是有10个元素,但我同意队列是正确的数据结构。