Коллекции в стиле Python в F # - PullRequest
4 голосов
/ 30 января 2012

Я пытаюсь реорганизовать код Python, который я использую для обработки финансовой аналитики, в F #, и у меня возникают трудности с репликацией некоторых из моих любимых типов данных Python. Например, в Python я мог бы с радостью объявить переменную, подобную этой:

timeSeries = { "20110131":1.5, "20110228":1.5, "20110331":1.5, 
               "20110431":1.5, "20110531":1.5 }

А потом разбрасывать его между функциями, но я не знаю эквивалента в F #. Я пробовал это:

let timeSeries = ( ["20110131":1.5], ["20110228":1.5], ["20110331":1.5], 
                   ["20110431":1.5], ["20110531":1.5] )

Но, конечно, это терпит неудачу ... Я знаю, что кто-то там, вероятно, трясется от смеха, но я очень плохо знаком с F #, и он чувствует себя сжимающим по сравнению с Python.

Я также знаком с .NET, просто F #, кажется, находится где-то между скриптовыми и "правильными" языками, такими как C #, и я пока не совсем понял, как эффективно его использовать - все занимает много времени.

Ответы [ 2 ]

9 голосов
/ 30 января 2012

Если честно, ваше словарное объявление в Python не сильно отличается от того, что вы можете объявить в F #:

let timeSeries = dict [
             "20110131", 1.5; // ',' is tuple delimiter and ';' is list delimiter
             "20110228", 1.5;
             "20110331", 1.5; 
             "20110431", 1.5; 
             "20110531", 1.5; // The last ';' is optional
             ]

Поскольку : используется для аннотации типов в F #, вы не можетет переопределить это.Но вы можете создать собственный инфиксный оператор, чтобы сделать код более читабельным и ближе к тому, что вы обычно делаете в Python:

let inline (=>) a b = a, b

let timeSeries = dict [
         "20110131" => 1.5;
         "20110228" => 1.5;
         "20110331" => 1.5; 
         "20110431" => 1.5; 
         "20110531" => 1.5;
         ]
2 голосов
/ 30 января 2012

Вы можете найти этот ответ полезным.Похоже, вы хотите словарь.Если вы еще не знаете, F # поддерживает что-то похожее на выражения генератора Python, называемое выражениями последовательности [MSDN] , что также может оказаться полезным.Например:

let d = dict [ for i in 0 .. 10 -> i, -i ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...