Вопрос: как получить в переменную значение элемента массива, но чтобы не было связи между этой переменной и массивом

Страницы: 1
RSS
Вопрос: как получить в переменную значение элемента массива, но чтобы не было связи между этой переменной и массивом
 
Здравствуйте!

Такой вопрос:
у меня есть таблица, допустим

arr_test = {}
arr_test["111"] = 111
arr_test["222"] = "222"
arr_test["333"] = 333
arr_test[1] = 111
arr_test[2] = 222
arr_test[3] = 333
arr_test[4] = {a = "aaa", b = "bbb"}
print_perem("arr_test")

затем если мне надо получить значение элемента [4]  я пишу

A = arr_test[4]

но если потом, я начинаю действия с переменной A, например
A.c = "ccc"

То меняется и элемент  arr_test[4] в исходной таблице.

Подскажите пожалуйста, как этого избежать?
Наверно есть какой-то оператор, позволяющий присвоить переменной А именно значение элемента arr_test[4]

Заранее спасибо
 
в простейшем случае (если не определены метаметоды и нет вложенных таблиц), нужно просто скопировать таблицк в таблицу

result = {}
for k,v in pairs(arr_test[4]) do
   result[k] = v
end

если есть вложенные таблицы, то их нужно тоже копировать (рекурсивно)
если определены метаметоды, то их копирование можно произвести через getmetatable и setmetatable


Однако если у вас возникает такая задача, это означает одно - у вас проблемы с логикой. Копирование таблиц - очень плохой приём.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
вместо этого
A = arr_test[4]
----------------------------------
надо записать так:
A={a=arr_test[4].a,b=arr_test[4].b}
-----------------------------
но оно Вам надо?
 
Николай, если спрашиваю, значит надо! Оставьте свои комментарии при себе.

Ваш ответ (впрочем как часто и бывает) бесполезен. Во-первых, о таком способе и так понятно было, а во-вторых, когда речь идет о массиве данных из 20-30 полей, да еще и структура данных с текстовыми индексами, то это вообще составляет целую проблему и потребует написания целой функции.
Так что дайте, пожалуйста, ответить на этот вопрос тем, кто может дать дельный совет!  
 
Цитата
s_mike@rambler.ru написал:
Однако если у вас возникает такая задача, это означает одно - у вас проблемы с логикой. Копирование таблиц - очень плохой приём.
С логикой у меня все нормально. Но давайте попробуем разобраться.
Есть таблица (назовем ее BIG_DATA) в которой загружены все данные из графиков, чтобы их можно было получить по индексу ДАТА.Эта таблица эпизодически выгружается в файл, чтобы потом можно было заниматься анализом исторических данных за бОльший период, чем допускает хранить квик.
И вот когда я получаю данные одного интервала по дате в переменную "А" - я потом работаю с этой переменной в рамках этого интервала, добавляю туда новые значения.
В нынешнем положении дел, если я после этого произведу сохранение в файл всей таблицы BIG_DATA) то все эти дополнительные значения тоже будут сохранены.
Вот и вопрос, где здесь нарушена логика и что Вы мне посоветуете, кроме как советовать делать функцию копирования под-таблицы друг в друга
 
проблемы с логикой - я имел ввиду не у вас лично, а в логику программы.

Трудно дать совет, не зная подробностей.

Можно, например, использовать следующий подход.

завести необходимое количество параллельных массивов-таймсерий. все они синхронизтрованы по номерам свечей.

в первом - котировки инструмента
во втором - например рассчитанные индикаторы
в третьем - какие-то служебные данные, например накопительные
в четвертом - еще что-нибудь, спреды, к примеру

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

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

Возможно, что собирать данные в файл для последующего анализа проще отдельной утилитой.  
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Вариант второй: при сохранении таблицы BIG_DATA в файл выгружать только необходимые параметры, а не все подряд. Очевидно, что список этих параметров конечен.
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Старатель написал:
Вариант второй: при сохранении таблицы BIG_DATA в файл выгружать только необходимые параметры, а не все подряд. Очевидно, что список этих параметров конечен.
Да пожалуй в данном случае это единственный подходящий вариант!
Хотя и не сильно удобный, т.к. содержание данных пока на стадии доработки и сейчас выгрузка происходит универсальной функцией, которая сохраняет весь массив в файл.
Но подождем, может все-таки кто-то знает ответ на самый первый вопрос?  
 
Цитата
Sergey Denegin написал:
Николай, если спрашиваю, значит надо! Оставьте свои комментарии при себе.

Ваш ответ (впрочем как часто и бывает) бесполезен. Во-первых, о таком способе и так понятно было, а во-вторых, когда речь идет о массиве данных из 20-30 полей, да еще и структура данных с текстовыми индексами, то это вообще составляет целую проблему и потребует написания целой функции.
Так что дайте, пожалуйста, ответить на этот вопрос тем, кто может дать дельный совет!
Вы зря обиделись.
Я написал Вам ответ на ваш вопрос  "как копировать таблицу"- цикл Вам предложили, поэтому я дал Вам вариант без цикла. Других вариантов не существует.
--------------------------------
Если хотите получить более конструктивный ответ, то сформулируйте задачу.
Как следует из дальнейших Ваших высказываний, вас интересует вообще-то не копирование таблицы, а организация обработки больших массивов данных. А это совершенно ругая задача, чем заявленная в Вашем вопросе.
Так что, увы, Вам оно ( то что Вы спросили изначально), как раз и не нужно .
Страницы: 1
Читают тему
Наверх