Я новичок в F #, поэтому увлекаюсь попытками приблизиться к проблемам более функциональным способом (а не с императивным мышлением, к которому я привык).Функциональный подход к инициализирующим классам
Для этой проблемы, я читаю данные из Excel, который содержит ~ 6000 строк данных с несколькими полями (возраст, пол, пол и т. Д.).
Я использую класс для хранения этих точек данных в - извлечение ниже:
type datastore(array:obj[,], row)=
let id=array.[row,1]:?> string;
let gender=array.[row,2] :?> string;
let sex = array.[row,3] :?> string;
//...continues for a number of other cases
В настоящее время я Инициирование эти классы со следующим кодом, который прекрасно работает, но является императивом подход:
let DataPoints =
let DataInput = //function to read data in from Excel
[for i in DataInput.GetLowerBound(0) .. DataInput.GetUpperBound(0) ->
new datastore(DataInput,i)]
Мой вопрос: как я могу сделать это более функционально?
Я пробовал следующее (что не работает: данная ошибка просто «остановлена из-за ошибки»).
let num = DataInput.GetUpperBound(0)
let MPs3 = Array.init num (fun x -> new datastore(DataInput,x))
Я также рассмотрел следующие ссылки, которые, похоже, не помогли полностью.
How to define a record field as an array in f#?
Использование ExcelProvider: http://fsprojects.github.io/ExcelProvider/ –
Спасибо за ссылку. У вас было общее руководство по моей конкретной проблеме, если я продолжу свой нынешний подход? – Pash101
Ваш код кажется прекрасным. Почему вы думаете, что это необходимо? –