Страницы: 1
RSS
СцепитьЕсли. Эффективный и универсальный алгоритм, JoinIf
 
Приветствую!

Представляю 1 основной способ — Progressive.
+ один "в лоб" (для примера)
+ один — с помощью массивов, но он никуда не годится.
+ один на основе Mid$() =. От него ничего реально качественного добиться (для универсальности) не вышло. Наверное, что-то можно подкрутить.

Что не исследовано:
    • метод скуля. То есть, отсортировать поле ключей и "сгруппировать" по ним, сцепляя строки.
    • контроль уникальности сцепляемых строк. С учётом регистра и без него.

Что-то из этого или всё сразу будет во втором тесте — с победителями (Progressive и Middle).
Файл
Код
Что нужно? Предложите более качественный алгоритм (возможно, на основе MidB() ).

Основная проблема: никогда заранее неизвестно, сколько уникальных ключей содержится в массиве и, сколько по каждому из них будет сцеплено значений. Массив может состоять только из ключей и тогда для каждого ключа будет только одно значение. Массив может состоять из одного ключа и тогда все значения нужно сцепить в одну строку (которая ещё может и не влезть в ячейку).

Если bedvit'у будет интересно, то предлагаю сделать такую процедуру — я протестирую.
В итоге, такая процедура должна принимать:
Возможно, имеет смысл сразу сделать комбайн (как для фильтра) — процедуру группировки двумерного массива со следующими аргументами:
Изменено: Jack Famous - 02.05.2024 17:27:39
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Часть 2. Агрегация на отсортированном по ключам массиве
Без подключенной библы bedvit'а тут делать нечего — штатные сортеры уступают многократно и проигрывают, даже не начав сцепку.
Файл
Модули
Изменено: Jack Famous - 03.05.2024 16:14:57
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, вот вроде темы с интересными названиями создаёте, но как по мне, то код не особо располагает к его прочтению и изучению уже даже из за наименования переменных - они незатейливо "по-бырику" названы n, r, s, p   и т.п.
Сугубо моё личное мнение, был бы рад если бы в этом плане что то поменялось и стало бы проще "дотянуться до звёзды"  :D
 
nilske, не считаю, что для счётчиков нужны длинные названия. Тем более, они могут менять свое назначение.

А вообще, счётчики (как и остальные переменные) у меня и так по смыслу названы: r считает строки (Rows), c — столбцы (Columns), n — номера (Number),  p — позиции (Positions). Двойные эти буквы тоже, как правило, несут смысл, схожий с одинарными. s — это вообще строковая переменная (String).

Если человек по коду не может понять, что делает конкретная переменная, то тут я ему вряд ли помогу, хотя спросить можно. Возможно, для индивидуального удобства, вам стоит переименовать мои переменные в свои. Я так часто делаю с чужим кодом, чтобы читать было понятнее/привычнее.
Изменено: Jack Famous - 03.05.2024 22:09:54
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх