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

У меня очередной вопрос на тему я познаю мир. зачем

контейнерам итераторы в виде классов?

14 ответов

27 просмотров

Можешь сделать record, но сильно лучше не будет У контейнеров может быть несколько итераторов, кстати (таблица состоит из строк, столбцов, клеток, и перебирать можно в разные стороны и с разными фильтрами) Вот чего не хватает, это генериков, чтобы не приходилось бойлер писать, именованные функции... Написать бы просто function GetEnumerator<type1>: iEnumerable<type1>; function GetEnumerator<type2>: RecordEnum<type2>;

zamtmn- Автор вопроса
Arioch The
Можешь сделать record, но сильно лучше не будет У...

меня напрягает лишнее ненужное выделение памяти при попытке получить доступ на запись к содержимому например TDictionary

zamtmn
меня напрягает лишнее ненужное выделение памяти пр...

Не выделяй. Сделай интерфейс и синглтон. ...а потом разгребай когда по нему пойдут вложенные циклы. Так-то любая операция со строками выделение памяти. У тебя точно настолько нагруженный код, что ты в нём строки запретил?

zamtmn- Автор вопроса
Arioch The
Не выделяй. Сделай интерфейс и синглтон. ...а пот...

Дак вот именно что уйти от выделений и подсовывать везде один и тот же итератор это не одно и тоже

Контейнер это лист или словарь? Для листа я делал патч с прямым доступом к данным

Зачем это в Дельфи - хз. Вообще итератор - это в первую очередь абстракция. Например в .net всё контейнеры реализуют IEnumerable/IEnumerator . Это даёт возможность писать функции, которые могут принять любой контейнер(массив, List, Set) и единообразно с ним работать. Естественно для реализации интерфейса нужен класс. При этом для самых распространенных контейнеров есть доп. энумератор - структура(рекорд). Поэтому если ты просто перечисляет элементы в List никаких выделений памяти не будет. Технически в последних дельфях можно сделать так же. Почему не делают - хз

zamtmn
Дак вот именно что уйти от выделений и подсовывать...

Это одно и то же. Если ты хочешь иметь несколько итераторов, то у каждого должна быть своя память. Если ты хочешь выделять память один раз, значит это один итератор.

Jack128
Зачем это в Дельфи - хз. Вообще итератор - это в п...

Скорее всего потому, что дельфа не умеет компилировать код в рантайме, может в итоге очень медленно получиться там, где Hotspot VM через пару минут заинлайнит десятки функций в пару команд процессора

zamtmn- Автор вопроса
Jack128
Зачем это в Дельфи - хз. Вообще итератор - это в п...

я не с той стороны зашел. по сути мне нужен просто доступ на запись. сейчас это можно только через итераторы

Jack128
Зачем это в Дельфи - хз. Вообще итератор - это в п...

И выделение памяти конечно будет, сделай функцию, которая возвращает рекорд (а не указатель) и посмотри как она вызывается. Вызыватель обязан выделить память под рекорд и проинициализировать её. А потом удалить. Это вероятно будет слегка быстрее, потому что TObject.Create - это цепочка из 6 что-ли функций КРОМЕ выделения памяти. С другой стороны, зануление памяти одним FillChar будет быстрее, чем отдельное зануление каждого managed-поля.

zamtmn- Автор вопроса
Jack128
Зачем это в Дельфи - хз. Вообще итератор - это в п...

наверно в делфи так. в фпц в томже TMap в штатном итераторе виртуальности нет как таковой и ненужна она. рекорб вместо класса бужет куда практичнее

zamtmn
я не с той стороны зашел. по сути мне нужен просто...

Что значит, что запись только через итераторы, если у тебя хэш-таблица? Dictionary1['abcde'] := 12345; Итератор тут вроде не нужен

zamtmn- Автор вопроса
Arioch The
Что значит, что запись только через итераторы, есл...

ну, а теперь перепиши его. или его часть чтоб AddOrSetValue тоже не очень катил

Arioch The
И выделение памяти конечно будет, сделай функцию, ...

Если под выделением памяти иметь в виду выделение памяти на стеке, то будет. Дин памяти не будет выделяться

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

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

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
hello friends. Do you know how can I learn getx? I have a software project that I should deliver it up to 5 weeks later and I need to learn firebase too. I will be thankfull
AmirHossein Razavi
15
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
lazarus-3.2.0/gtk, linux патч "имя проекта по умолчанию project1 -> prj" день добрый не нравится "именя проекта по умолчанию" (project1), к.раз приходится переименовывать (н...
livontiy
5
Вопрос. Теоретический. Есть список команд. Команды отправляю в обработку некой функции, по очереди. Разные команды могут давать разные результаты после обработки. В зависимос...
Serjone
7
Can I forward ports (including the SSH port) between two machines without SSH? I know I can forward SSH server port from machine A (which blocks all requests by firewall) to ...
required optional
5
Всем вечера. Подскажите как лучше сделать. делаю на Д10 Например будет база данных на SQLite. в ней будет много таблиц. более 50шт Типа справочник. Содержать ID Name Id p...
Андрей Т 🐎
10
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
подскажите пожалуйста, как мне освободить результат записанный в переменную result? в чем проблема подскажите если МОЖЕТЕ?
Михаил Helper
28
Я короче решил скомпилировать Nim в js, я думал он сработает как обычный транслятор. По итогу он мне создал файл с расширением js, и туда поместил кучу кода Вопрос, что это з...
𝕾𝖍𝖆𝖉𝖊 <suspense>
9
Карта сайта