Ответы на вопросы — Таблицы LUA

Приветствую всех кто интересуется программированием в торговой платформе QUIK на языке LUA.

Начинаю новую рубрику «Ответы на вопросы». Здесь я буду отвечать на ваши вопросы и сегодня будем рассматривать вопросы таблицы в языке LUA.

Вопросы Таблицы LUAКак заполнить таблицу

Как заполнить таблицу LUAСразу приступим к написанию кода и для начала создаем пустую таблицу

В первой строке создаем пустую таблицу, даем ей имя table1 и фигурными скобками указываем что это именно таблица. Далее в строках со 2 по 7 заполняем таблицу данными. Пишем имя таблицы и в квадратных скобках пишем индекс, то есть ключ таблицы и присваиваем значение. Значение может быть текст, числа, даты всё всё что угодно.

Есть еще один вариант заполнения таблицы, не создавая пустую таблицу.

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

Если обратить внимание на последнюю строку то увидим, что таблица содержит такой ключ ДатаВремя. В платформе QUIK датавремя представлена в виде таблицы. В первом варианте я представил датавремя в виде текста, для того чтобы записать дату время в виде таблицы необходимо для начала создать ее. Создаем таблицу dateTime и заполняем необходимые поля год, месяц, день, часы, минуты, секунды, также микросекунды и миллисекунды. И теперь можно в таблицу записывать dateTime. Теперь table2 содержит дату и время в виде таблицы. Не стоит забывать что таблицы в языке LUA  являются ссылочным типом данных.

Таким же образом можно и не создавать отдельную переменную, а записать всё сразу же в таблицу.

Добавление данных в таблицу

Как добавить данные в таблицу LUAДобавление данных в таблицу ни чем не отличается от заполнения таблицы.

Записываем ещё несколько строк фамилия, имя, отчество и рост.

Вот и все, данные в таблицу добавлены

Как проверить что таблица не пустая

Как проверить что таблица LUA не пустаяДля ответа на этот вопрос можно воспользоваться двумя вариантами.

Первый вариант. Проверить длину таблицы. Соответственно если длина таблица 0 значит она пустая. Для того чтобы узнать длину таблицы необходимо перед именем таблицы установить знак #

Если запустить код, то увидим 1. Только лишь одно значение имеется в таблице, хотя это не так. Дело в том, что данный способ хорошо работает если таблица содержит именно числовые индексы 1 2 3 4 5 и так далее, а так же важный момент последовательность не должна содержать пропусков. Если таблица будет содержать индексы 1 2 3 а потом сразу 5 6 7 то длина будет 3.

Второй вариант как можно узнать что таблица не пуста, запустить перебор всех значений. Можно написать отдельную функцию.

Работает она следующим образом. Передаем в таблицу которую необходимо проверить. Запускаем цикл по перебору всех значений в этой таблице, но на самом деле все значения не перебираем, а попадая в тело цикла сразу же возвращаем Ложное значение из функции, что будет означать, что таблица не является пустой. Если же значений нет в таблице, то в тело цикла не попадаем, а идём дальше и возвращается результат Истина.

Как проверить наличие записи в таблице

Как проверить наличие записи в таблице LUAЕсть несколько вариантов проверки данных.

Первый вариант. Если хотим проверить содержится ли в таблице заданный ключ. Предположим необходимо узнать, содержит ли таблица ключ Биржа.

Второй Вариант. Проверить содержит ли таблица заданное значение. Допустим необходимо узнать имеется ли в таблице слово Сбербанк неважно под каким ключом.

Третий вариант. Когда точно известен и ключ и значение. Если необходимо узнать содержится ли в таблицу ключ «Количество» со значением 150.

Рассмотрим все три варианта подробнее.

Просто выполняем условие. Если существует ключ «Биржа» и не важно какое значение,  выдаем сообщение «Ключ есть» иначе «Ключа нет»

Что бы узнать содержит ли таблица нужное значение, необходимо запустить цикл по перебору всех значений в таблице. Ставим условие, если value соответствует тому значению которое необходимо найти («Сбербанк»), тогда выдаем сообщение «Значение есть» иначе «Значения нет». Оператором break цикл прервется как только совпадение будет найдено. Нет смысла перебирать все значения, если хоть одно уже нашлось.

Переходим к последнему третьему варианту. Проверка ключа и значения.

Ставим условие таким образом, что бы значение с ключом «Количество» обязательно содержало 150 и вот только в этом случае получим сообщение «Совпадение».

Как скопировать таблицу целиком

Как скопировать всю таблицу LUA целикомТак как таблицы в LUA являются ссылочным типом данных обычное присваивание не подходит.

Необходимо опять-таки перебрать все индексы и каждый копировать.

Объявляем переменную table5, запускаем цикл по перебору всех значений в table2 и копируем все значения из table2 в table5. Таким образом происходит полное копирование таблицы целиком.

Но есть один момент. Этот вариант всё-таки не скопирует таблицу целиком если в ней будет присутствовать еще таблица, как раз в примере так и есть, в table2 имеется таблица ДатаВремя. В этом случае через присваивание копируется ссылка на таблицу дата время, а не вся таблица.

Что бы решить эту проблему, нужно дополнительно выполнять проверку. Если тип копируемых данных «table», тогда запустить цикл и выполнить копирование каждого элемента этой таблицы. Как это сделать я думаю вы догадались.

На этом всё. Задавайте свои вопросы буду отвечать.

Постоянная ссылка на это сообщение: https://k-pavel.ru/otvety-na-voprosy-tablicy-lua/

avatar

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

  Subscribe  
Подписаться на