Excel Как добавить элементы одного одномерного массива в другой (того же типа) БЕЗ цикла и быстрее, чем с циклом30.05.2024, 13:10. Показов 1665. Ответов 16
Приветствую!
Суть: у меня есть основной массив, который наполняется блоками(другими массивами). Иногда НЕТ возможности наполнять основной массив напрямую, минуя промежуточный. В итоге, задача сводится к тому, как побыстрее наполнить основной массив добавочным. В принципе, для строковых массивов и так всё довольно неплохо, но хотелось бы обсудить альтернативные варианты — в том числе и для других типов массивов (кроме строкового). Предполагаю, что тут может помочь копирование памяти, но не знаю, как это сделать. Процедуры и тестовый стенд
0
|
30.05.2024, 13:10 | |
Ответы с готовыми решениями:
16
Входят ли все элементы одного одномерного массива в другой одномерный массив? Добавить элементы из одного массива в другой |
30.05.2024, 16:58 | ||||||
Jack Famous, привет. Со строками много нюансов. Массив строк это фактически массив указателей на строки, которые фактически тоже отдельные массивы в отдельных выделенных участках памяти. Можно конечно скопировать указатели строк из одного массива в другой с помощью CopyMemory, но при этом, эти скопированные указатели становятся, как бы не безопасными и вызовут сбой при завершении процедуры, поскольку VB нет полной поддержки работы с указателями. Поэтому эти лишние указатели, нужно еще обязательно очищать перед выходом из процедуры..
Массивы чисел можно просто копировать
1
|
30.05.2024, 17:23 [ТС] | ||
testuser2, привет!
Мда… Нехорошая ситуация со строками получается … Может, Виталий поможет? Он в своей библе делал инструмент для обязательного сброса чего-то там (может, как раз, указателей). Чтобы было видно оба массива и результат. К тому же я не знаю, как размер вычислить правильно…
0
|
30.05.2024, 17:39 | |||||||
1
|
30.05.2024, 18:17 [ТС] | |
testuser2, непонятны волшебные числа. Поясни, если можешь, пожалуйста …
Тестирую. Завтра отвечу.
0
|
30.05.2024, 18:19 [ТС] | |
0
|
![]() |
|
30.05.2024, 18:46 | |
На С++ я бы сделал так:
Создаешь новый пустой массив вариантов, размером с первых два. Копируешь указатели на строки из первого и второго в новый массив. В старом обнуляешь указатели и тип варианта. Готово. По сути ты скопировал только указатели, строки так и лежат на своем участке памяти. Первые два массива безопасно очистяться, т.к. мы обнулили варианты. Без обнуления каждый указатель на строку будет очищатся дважды, в новом массиве и в старом. Будет выброс исключения, про что написал testuser2. Но VBA здесь не виноват. Сами велосипед придумываете. Добавлено через 2 минуты В теории в VBA тоже так можно сделать, занулив память первых двух массивов. Добавлено через 7 минут Числа не генерируют ошибку, потому что хранятся в самом варианте, а не в выделенной отдельной памяти, как строки (с указателем в варианте). Поэтому числа получается два и два раза очищается (старое, новое, здесь все ок) Добавлено через 4 минуты Только с числами нет смысла в такой алгоритм городить.
1
|
31.05.2024, 11:06 | ||||||||
![]() РешениеДобавлено через 56 секунд Добавлено через 2 часа 38 минут Решение вопроса, как я вижу (под спойлером) для строковых массивов. Кликните здесь для просмотра всего текста
1
|
31.05.2024, 15:11 [ТС] | ||||||||||||
![]() Огромное спасибо! Профит просто невероятный. Временем работы, по сути, теперь вообще можно пренебречь (как при смене размерностей у Виталия). Это позволит строить логику гораздо более гибко. Код
Если ПЕРЕМЕЩАТЬ (очищать добавочный массив), то он продолжает существовать, только все элементы — пустые. Добавил Erase. Как изменится подобная функция для чисел и варианта? UPD: Так можно передавать пустой «основной» массив
Думаю, с проверкой массива на наличие элементов ( If PRDX_Arr_Check_IsFull() ) проблем не возникнет ![]()
1
|
31.05.2024, 16:27 | ||
1
|
03.06.2024, 13:45 [ТС] | |||
И константа ptrSz та же будет? Боюсь вывалиться в синий кран на тестах, так что проясни, пожалуйста ![]()
0
|
03.06.2024, 14:06 | ||
1
|
03.06.2024, 14:17 [ТС] | |||
![]() То есть ptrSz для aByte() As Byte равно 1, aBool() As Boolean равно 2 и так далее?
0
|
03.06.2024, 14:47 | |||||||||
1
|
03.06.2024, 16:26 [ТС] | |||
testuser2, спасибо
![]() Если копируем указатели, как во 2ом варианте (или со строками), то обязательно обнуляем источник — верно? Если копируем значения, то можно и не обнулять [значения] — правильно? Просто, из-за RtlMoveMemory я подумал, что происходит ПЕРЕМЕЩЕНИЕ — отсюда и непонятки с вопросами…
0
|
03.06.2024, 17:47 | |||
Добавлено через 6 минут
1
|
03.06.2024, 17:47 [ТС] | |
testuser2, спасибо. А остальные мои вопросы и уточнения?
![]() А — вижу ![]()
0
|
03.06.2024, 17:47 | |
Помогаю со студенческими работами здесь
17
Скопировать элементы одного массива в другой без повторений Из одного массива скопировать в другой массив те элементы, в которых в двоичной записи 0 больше чем 1 Как добавить/удалить элементы одного ListBox в/из другой/другого
Записать элементы одномерного массива в двумерную матрицу одним циклом Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
![]() |
||||
JWT аутентификация в ASP.NET Core
UnmanagedCoder 18.06.2025
Разрабатывая веб-приложения, я постоянно сталкиваюсь с дилеммой: как обеспечить надежную аутентификацию пользователей без ущерба для производительности и масштабируемости? Классические подходы на. . .
|
Краткий курс по С#
aaLeXAA 18.06.2025
Здесь вы найдете все необходимые функции чтоб написать програму на C#
Задание 1:
КЛАСС FORM 1
public partial class Form1 : Form
{
Spisok listin = new Spisok();
. . .
|
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
|
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
|
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
|
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
|
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
|
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
|
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
|
Лето вокруг.
kumehtar 13.06.2025
Лето вокруг.
Наполненное бурями и ураганами событий. На фоне магии Жизни, священной и вечной, неумелой рукой человека рисуется панорама душевного непокоя.
Странные серые краски проникают и. . .
|