Pull to refresh
94
1

User

Send message

Тут bla-bla это суть, а мне нужно избавиться от повторяющихся for

Можно каждую трансформацию данных начинать с церемонии
for i := 0 to list.Count-1 do begin bla-bla end;
А можно написать только то, что нужно для задачи и пойти решать следующие задачи, не распыляясь на итерации по спискам.

Тогда ткните в документацию embarcadero, какой метод надо использовать.

Сравнивалась реализация с bitstring? Тогда может, дело в нагрузке на память?

Ну, например, мне именно такое никогда не требовалось

Я на дельфи писал вложенные циклы и ничего другого мне не требовалось, потому что ничего другого язык не предоставлял.

Enumerator

Много теории. А на практике, однострочником можно ли перелить из одного TList в другой TList только чётные элементы?

Конкретно этот код - копирует, потому что переменная ArrSlice - не ссылочного типа, а тип-значение.

Список языков на международных ACM ICPC:

    C
    C++
    Java.
    Python (2 & 3)
    Kotlin

не вижу тут Паскаль.
А кстати, в 90-х был )))

И что мешает сделать ему
function Filter(source: TEnumerable<T>; predicate: TFunction<T, bool>): TEnumerable<T>;
в стандартной библиотеке?

А слона то я и не заметил, тут нужен PArraySlice ))

Как думаете, откуда уши растут у шарпового Span и сишного ranges?
Я думаю, это из серверной разработки, когда для обработки http-заголовков решили не сплиттить входящий запрос на кусочки, а придумали Span-ы и string_view. А дальше выделяем кусок Content-Length: 123 и передаём в функции, которые раньше принимали строки (с минимальным рефакторингом кода), и всё по-прежнему красиво, выглядит как будто мы пакет побили на строки и разбираемся с ними отдельно, а копирований и аллокаций - нет.

Решение с TArraySlice не позволит провернуть такой трюк, несите другое.

type
  TMyCustomList = class ...

begin
  list := TMyCustomList.Create;
  ArrSlice = TArraySlice((@list[5])^);

glhf...

достаточно просто передать указатель и длину

Решение в стиле plain old C, рушит безопасность по выходу за границы области.

TEnumerable<T> - абстракция, которая позволяет создать последовательность, даже не из последовательных данных

Как раз, удобная абстракция для наложения произвольных фильтров и произвольных поисков. Зачем требовать List<T>

И вот TList<T> имеет возможность задать предикат для поиска и сортировки

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

В современных языках такие цепочки трансформаций оптимизируются в compile-time, поэтому хорошо, когда оно встроено в std, а не написано на коленке поверх стандартных TEnumerable, например через yield.

Я думаю, Delphi отстаёт от c++, который отстаёт от C#.
Когда-нибудь каждый догонит текущую ситуацию, а фаворит гонки продвинется ещё дальше.

Ну например, можно ли взять кусок массива с 5-го элемента по 30-й и передать как абстрактный кусок памяти без копирования (получатель не должен знать, что лежит уровнем ниже - массив/список/вектор).

Или вот я вижу некий абстрактный TEnumerable<T>. Есть ли метод, ищущий первый элемент, удовлетворяющий переданному предикату?

Хватило, если бы блага распределялись более равномерно.
А так всё логично - рептилоиды устроили трансформацию общества, чтобы ещё больше усилить эксплуатацию. "Дожать", на языке эффективного менеджмента.

В std очень много обобщённого программирования.
Абстракные алгоритмы на любых контейнерах, в том числе не известных std, всякие абстракции-обёртки над итераторами, диапазонами (views, ranges, string_view). Одни только функции с датой/временем/интервалами тянут на целую книгу.

Можно тут посмотреть оглавление
https://eel.is/c++draft/

В Delphi именно generics, как в C#/java, а не templates, как в C++
Различие довольно существенное.

Alt+Ctrl+Ins копирует полный путь к папке под курсором, потом переходим на панель источник, F6, Shift+Ins, Enter. Можно намакросить, если надо очень часто.

FARdroid использую в связке с PortaDev

Первый реализует протокол ADB, который включен довольно редко, а второй - более обывательский протокол MTP.

Ещё один пример, когда на плаг-ринге лежит версия 2014 года, а на форуме обновление 2023.

На что я отвечаю, что в распределённой системе расходов будет больше, т.к. добавляются расходы на управление процессом.

1
23 ...

Information

Rating
1,378-th
Location
Россия
Registered
Activity