Size: a a a

2020 June 17

RG

Romson Gardey in F# Chat
Vladimir Shchur
да) поэтому его мало кто юзает, проще обычный дотнетовский словарь юзать
Спасибо!
источник

R

Roman in F# Chat
Vladimir Shchur
ого! тоже мутабельную переменную апдейтите?
нет конечно.
источник

VS

Vladimir Shchur in F# Chat
а как тогда юзаете?
источник

R

Roman in F# Chat
Romson Gardey
Вижу в интернетах такую функцию например

val add : 'key -> 'a -> Map<'key,'a> -> Map<'key,'a>

А как ее юзать?

Как передать в нее и map и ключ и значение
let myOldMap = map [(1,1); (2,2)]
let myNewMap = Map.add 2 3 myOldMap
источник

RG

Romson Gardey in F# Chat
Roman
let myOldMap = map [(1,1); (2,2)]
let myNewMap = Map.add 2 3 myOldMap
Спасибо!
источник

I

Igor in F# Chat
Vladimir Shchur
ну ты все равно можешь ее вызвать, это просто экстеншн метод на контексте
да нет у меня никакого контекста, эта функция используется в другом классе, который сам как зависимость заброшен. Просто не хотелось в функцию каждый раз передавать параметр. Я вообще сделал мутабельное поле в модуле и его заполняю при старте своего HostedService, но вот сомневаюсь что это правильно
источник

R

Roman in F# Chat
Vladimir Shchur
а как тогда юзаете?
ты меня прям немного в тупик поставил)

Мы за редким исключением работаем с неизменяемыми данными. Поэтому обычно какую-нить коллекцию смапим/сгруппируем и в конце Map.ofSeq.

Ну или иногда { myRecord with MyMapProp = myRecord.MyMapProp.Add(k,v)} например
источник

VS

Vladimir Shchur in F# Chat
Igor
да нет у меня никакого контекста, эта функция используется в другом классе, который сам как зависимость заброшен. Просто не хотелось в функцию каждый раз передавать параметр. Я вообще сделал мутабельное поле в модуле и его заполняю при старте своего HostedService, но вот сомневаюсь что это правильно
ну я тоже так делаю, на старте беру GetService и прокидываю результат куда надо, правда в мутабельную переменную не сохраняю
источник

VS

Vladimir Shchur in F# Chat
Roman
ты меня прям немного в тупик поставил)

Мы за редким исключением работаем с неизменяемыми данными. Поэтому обычно какую-нить коллекцию смапим/сгруппируем и в конце Map.ofSeq.

Ну или иногда { myRecord with MyMapProp = myRecord.MyMapProp.Add(k,v)} например
понятно) ну я к тому что если нужно изменять, то странно брать неизменяемый словарь)
источник

R

Roman in F# Chat
Vladimir Shchur
понятно) ну я к тому что если нужно изменять, то странно брать неизменяемый словарь)
у меня вот сейчас есть кусок с акторами в коде, и у одного из них в стейте есть словарь. Я взял дотнетовский женерик дикшонари, но не ради мутабельности, а ради быстрого поиска — словарь большой будет. Но в плане кода большой разницы нет — подменить поле в рекорде с помощью with или добавить в мутабельный словарь
источник

R

Roman in F# Chat
собсно, у фшарп мапы есть плюс — она не кидает исключений, например
источник

R

Roman in F# Chat
и частенько нужен add or replace. В фшарп мапе это просто add, а в стандартном словаре нужно все проверками обмазать
источник

VS

Vladimir Shchur in F# Chat
Roman
у меня вот сейчас есть кусок с акторами в коде, и у одного из них в стейте есть словарь. Я взял дотнетовский женерик дикшонари, но не ради мутабельности, а ради быстрого поиска — словарь большой будет. Но в плане кода большой разницы нет — подменить поле в рекорде с помощью with или добавить в мутабельный словарь
а он точно на апдейте не создаёт новую копию, а переюзает старую?
источник

R

Roman in F# Chat
не понял вопроса
источник

R

Roman in F# Chat
кто он и копию чего?)
источник

VS

Vladimir Shchur in F# Chat
ну дорого же кажется иммутабельный словарт апдейтить
источник

VS

Vladimir Shchur in F# Chat
особенно когда он большой
источник

R

Roman in F# Chat
элементы ж не копируются
источник

R

Roman in F# Chat
только обертка вокруг них, где бОльшая часть узлов переиспользуется
источник

VS

Vladimir Shchur in F# Chat
а все дерево поиска думаю копируется
источник