В качестве конкретного представления вы можете выбрать либо массив, либо список, либо какой-либо другой тип коллизии .NET.Последовательность seq<'T>
является абстрактным типом, и массив и список автоматически также являются последовательностями - это означает, что когда вы пишете некоторый код, который работает с последовательностями, он будет работать с любым конкретным типом данных (массивом, списком или любой другой коллекцией .NET).).
Итак, при записи обработки данных вы можете использовать Seq
по умолчанию (поскольку это дает вам большую гибкость - не важно, какое конкретное представление вы используете), а затемоптимизируйте некоторые операции, чтобы использовать конкретное представление (каким бы оно ни было), если вам нужно что-то, чтобы работать быстрее.
Относительно конкретного представления - я думаю, что ключевой вопрос заключается в том, хотите ли вы добавитьэлементы без изменения исходной структуры данных (неизменяемый список или массив, используемый неизменяемым образом) или необходимость изменения структуры данных (например, использование некоторой изменяемой коллекции .NET).
Если вам нужно добавлять новые элементы частотогда вы можете использовать неизменный список (который поддерживает добавление элементов кront) или изменяемая коллекция (массив не будет работать, поскольку его нельзя изменить в размере).
Если вы работаете над более сложной системой, я бы рекомендовал взглянуть на ObservableCollection<T>
(см. MSDN ).Это коллекция, которая автоматически уведомляет вас, когда она изменяется.В ответ на уведомление вы можете обновить свою статистику (она также сообщает вам, какие элементы были добавлены, поэтому вам не нужно все пересчитывать).Однако в F # нет библиотек для работы с этим типом, поэтому вам придется много чего писать самостоятельно.
Если вы добавляете данные очень редко или добавляетеих в больших группах, вы можете использовать массив (и выделять новый массив каждый раз, когда вы добавляете элементы).Если у вас есть только относительно небольшое количество элементов в коллекции, вы можете использовать списки (где добавить элемент легко).
Для численных расчетов F # PowerPack (и типы, подобные вектору) предлагают только весьма ограниченный набор функций, поэтому вам, возможно, придется взглянуть на некоторые сторонние библиотеки. Чрезвычайная оптимизация - это коммерческая библиотека с некоторыми примерами F #, а Math.NET - альтернатива с открытым исходным кодом.
В противном случае трудно дать какой-либо конкретный совет - можетВы добавили еще некоторые подробности о вашей системе?(например, насколько велик набор данных, сколько элементов нужно добавлять, как часто и т. д.)