Como representación concreta, puede elegir una matriz o lista o algún otro tipo de collección .NET. Una secuencia seq<'T>
es un tipo abstracto y tanto la matriz como la lista también son automáticamente secuencias; esto significa que cuando se escribe algún código que funcione con secuencias, funcionará con cualquier tipo concreto de datos (matriz, lista o cualquier otra colección .NET).
Así, al escribir procesamiento de datos, puede utilizar Seq
por defecto (ya que le da una gran flexibilidad - no importa lo que la representación concreta que se use) y luego optimizar algunas operaciones para utilizar la representación concreta (lo eso será) si necesitas algo para correr más rápido.
En cuanto a la concreta representación - Creo que la pregunta crucial es si desea agregar elementos sin cambiar la estructura de datos original (lista inmutable o matriz utilizado de una manera inmutable) o si desea mutar la estructura de datos (por ejemplo, use alguna colección mutable de .NET).
Si necesita agregar nuevos elementos a la vez, puede usar la lista inmutable (que admite agregar elementos al frente) o una colección mutable (la matriz no funciona ya que no se puede redimensionar).
Si está trabajando en un sistema más sofisticado, recomendaría echar un vistazo a ObservableCollection<T>
(ver MSDN). Esta es una colección que le notifica automáticamente cuando se cambia. En respuesta a la notificación, puede actualizar sus estadísticas (también le dice qué elementos se agregaron, por lo que no necesita volver a calcular todo). Sin embargo, F # no tiene bibliotecas para trabajar con este tipo, por lo que tendrá que escribir muchas cosas usted mismo.
Si agrega datos solo raramente o los agrega en grupos más grandes, podría usar una matriz (y asignar nueva matriz cada vez que agregue elementos). Si solo tiene un número relativamente pequeño de elementos en la colección, podría usar listas (donde agregar elementos es fácil).
Para los cálculos numéricos, el F # PowerPack (y tipos como vector) ofrecen único conjunto bastante limitied de características, por lo que puede que tenga que mirar en algunas bibliotecas partido thrid. Extreme optimizations es una biblioteca comercial con algunos ejemplos F # y Math.NET es una alternativa de código abierto.
De lo contrario, es difícil dar un consejo concreto: ¿puede agregar más detalles sobre su sistema? (por ejemplo, qué tan grande es el conjunto de datos, cuántos elementos se deben agregar con qué frecuencia, etc.)
No creo que la pregunta mutable frente a la inmutable sea "crucial". Las personas usan matrices de forma inmutable todo el tiempo, solo para obtener el rendimiento de las matrices (¡que .NET tuviera un tipo de matriz de solo lectura!), Así que creo que otras pragmáticas son una preocupación mayor que la mutabilidad. – Brian
@Brian - sí, tienes toda la razón. De hecho, estaba considerando la matriz más como _immutable_ porque no puede agregar elementos (¡y estaba asumiendo que los datos históricos no cambian para que los elementos no se muten)! Aclaré la respuesta. –