F # карта / набор пониманий - PullRequest
2 голосов
/ 08 октября 2011

Я ищу что-то похожее на понимание dict / list / set в Python. В Python вы можете сделать:

[x+2 for x in list if x > 10]

и в F #

[for x in list do if x > 10 yield x+2]

но в Python вы также можете сделать:

{x+2 for x in list if x > 10}

для генерации наборов и

{k: (v+10)/2 for k, v in list.items() if k > 5}

для создания Dicts. Есть ли эквивалентный (как с точки зрения функции, так и с точки зрения общей аккуратности) синтаксис для такого рода вещей в F #?

Ответы [ 2 ]

4 голосов
/ 08 октября 2011

Существует функция set, принимающая seq<_>, поэтому вы можете сделать:

set [for x in list do if x > 10 yield x+2]

То же самое с dict. Вот соответствующие документы:

set: http://msdn.microsoft.com/en-us/library/ee353747.aspx
dict: http://msdn.microsoft.com/en-us/library/ee353774.aspx

2 голосов
/ 08 октября 2011

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

let intSet = set [for x in list do if x > 10 yield x+2]


let intMap = dict [for (x, y) in list do if x > 10 yield (x,y+2)]
...