169 похожих чатов

Мне кажется я неправ. Подтвердите или опровергните, пож. Я заметил, что

все время пытаюсь пихать странные оптимизации.
Например у меня есть мапа, и мне надо пробежаться по ее элементам, какие-то из них надо поменять, а какие-то удалить.
Ну я думаю: чего два раза бегать по мапе, если можно за один раз все сделать? И начинаются всякие толстые reduce, упрощенно
Enum.reduce(map, map, fn {k, v}, map ->
case k do
{1, d} -> Map.put(map, k, v + d)
{2, _} -> Map.delete(map, k)
end
end)
В более сложных случаях все превращается в лютое нечитаемое говно.

Напрашиватеся другой вариант:
map
|> Enum.map(fn
{{1, d} = k, v} -> {k, v + d}
e -> e
end)
|> Enum.filter(&match?({2, _}, &1))
|> Enum.into(%{})
Он куда более понятен, но тут бегаем фактически три раза. В ленивом хацкеле бегалось бы один раз, но тут наверняка три раза будет.
Но с другой стороны и хер бы с ним, мапы небольшие, может сотня-другая пар максимально.

Что скажете?

15 ответов

15 просмотров

Я думаю можно поискать в сторону кложурных трансдьюсеров https://github.com/garyposter/elixir-transducer

First, make it correct. Then, make it beautiful. Then, if you need to, make it performant. Because 9 times out of 10, making it beautiful also makes it performant enough.

Dima
Я думаю можно поискать в сторону кложурных трансдь...

Лучше просто использовать Stream, который делает абсолютно всё то же самое, только без DSL

Евгений- Автор вопроса
Евгений
Интересная штука. Спасибо!

Репозиторий покрыт пылью, но там реализация очень маленькая и интересна само направление мысли.

Пиши так, чтобы было быстро писать и читаемо другим

вообще надо было сначала filter, а потом уже map, и это запросто может быть быстрее редьюса потому что эрланг любит списки

Евгений- Автор вопроса
Maksim Lapshin
Пиши так, чтобы было быстро писать и читаемо други...

Да фиг с другими, я один пишу. И сам с трудом вникаю через неделю :D

Евгений- Автор вопроса
Fried Zucchini
вообще надо было сначала filter, а потом уже map, ...

А какая разница? Типа после фильтра список может стать короче? :)

Есть же Stream

Евгений- Автор вопроса
Tharin
Есть же Stream

Он тормозной

Евгений
Он тормозной

А ты куда-то спешишь?

Евгений- Автор вопроса
Tharin
А ты куда-то спешишь?

Нет, но зачем Stream, когда есть Enum?

Евгений
Нет, но зачем Stream, когда есть Enum?

Если нужен fusion конвейра, то это как раз Stream, но для "маленьких" объемов он не эффективен, да.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта