Обработка таблиц

<< Click to Display Table of Contents >>

Navigation:  Modbus Universal MasterOPC Server > Руководство по языку Lua 5.1 > Библиотеки функций > Обработка таблиц >

Обработка таблиц

Обработка таблиц

mbul_mail table.concat

mbul_mail table.insert

mbul_mail table.maxn

mbul_mail table.remove

mbul_mail table.sort

Эта библиотека предоставляет основные функции для работы с таблицами. Все функции включены в таблицу table..

Примечание. Следует помнить, что при операции присваивания таблицы и передачи таблицы в функцию происходит ее передача по ссылке - то есть копия таблицы не создается (см. Особенности работы с таблицами).

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

table.concat

table.concat (table [, sep [, i [, j]]])

Задан массив, в котором все элементы – строки или числа, возвращает table[i]..sep..table[i+1] ··· sep..table[j]. Значение по умолчанию для sep – пустая строка, значение по умолчанию для i – 1, для j – длина таблицы. Если i больше j, функция возвращает пустую строку.

Пример

local Array={10,20,30}

local Res=table.concat(Array,"-");

--Res=10-20-30

table.insert

table.insert (table, [pos,] value)

Вставляет элемент value в позицию pos в table, сдвигая вверх остальные элементы. Значение по умолчанию для pos равно n+1, где n – это длина таблицы (см. Получение длины ), т.о.вызов table.insert(t,x) добавляет x в конец таблицы t.

Пример

local Array={10,20,30}

table.insert(Array,40); --в конец таблицы добавится 40

table.insert(Array,2,50); --во второй элемент таблицы добавляется 50, остальные элементы сдвигаются вверх

table.maxn

table.maxn (table)

Возвращает наибольший положительный числовой индекс заданной таблицы, или ноль, если таблица не имеет положительных числовых индексов. (Для выполнения запроса эта функция перебирает все индексы таблицы).

Пример

local Array={10,20,30}

local Count=table.maxn(Array);

--Count=3

table.remove

table.remove (table [, pos])

Удаляет из table элемент в позиции pos, сдвигая вниз остальные элементы, если это необходимо. Возвращает значение удаленного элемента. Значение по умолчанию для pos n, где n – длина таблицы, т.о. вызов table.remove(t) удаляет последний элемент таблицы t. (Примечание: использование функций вставки-удаления со значениями по умолчанию позволяет работать с таблицей как со стандартным стеком LIFO).

Пример

local Array={10,20,30}

local RemoveValue=table.remove(Array,2);

--из таблицы удаляется число элемент 2, RemoveValue=20

table.sort

table.sort (table [, comp])

Сортирует элементы таблицы в заданном порядке, начиная с table[1] и заканчивая table[n], где n – длина таблицы. Если параметр comp задан, то он должен быть функцией, которая получает два табличных элемента и возвращает true, если первый из них меньше второго (т.о. not comp(a[i+1], a[i]) будет равно true после окончания сортировки). Если comp не задан, то вместо него будет использован стандартный оператор Lua "<".

Алгоритм сортировки не стабилен в том смысле, что равные элементы могут быть переставлены в процессе сортировки.

Пример

--функция сравнения. При необходимости может быть сколь угодно сложной

function Compare(val1,val2)

 return val1<val2; --вернем true если val1<val2 и false в противном случае

end;

--использование сортировки

local Array={13,2,44,22,18}

table.sort(Array,Compare);

--Array[1] =2,Array[2] =13,Array[3] =18,Array[4] =22,Array[5] =44