Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Модуль table

Общие сведения

Модуль table включает в себя всё из стандартной библиотеки для работы с таблицами в Lua, а также некоторые расширения специально для Tarantool.

Введите table, чтобы увидеть список функций:

  • clear (расширение LuaJIT = удаление всех элементов)
  • concat (конкатенация)
  • copy (создание копии массива)
  • deepcopy (см. описание ниже)
  • foreach
  • foreachi
  • getn (получение количества элементов в массиве)
  • insert (вставка элемента в массив)
  • maxn (получение наибольшего индекса)
  • move (перемещение элементов между таблицами)
  • new (расширение LuaJIT = возврат новой таблицы с предварительно выделенными элементами)
  • remove (удаление элемента из массива)
  • sort (сортировка элементов массива)

В данном разделе мы рассматриваем только дополнительную функцию, добавленную разработчиками Tarantool: deepcopy.

table.deepcopy(input-table)

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

Параметры:

  • input-table (table) — таблица для копирования

Возвращает

копия таблицы

Тип возвращаемого значения

table

Пример:

tarantool> input_table = {1,{'a','b'}}---...tarantool> output_table = table.deepcopy(input_table)---...tarantool> output_table---- - 1  - - a  - b...

table.sort(input-table[, comparison-function])

Размещение содержимого введенной таблицы в отсортированном порядке.

В базовой сортировке в Lua, table.sort, есть функция сравнения, которая используется по умолчанию: function (a, b) return a < b end.

Эта стандартная функция эффективна. Однако иногда пользователям Tarantool может понадобиться эквивалент table.sort со следующими функциями:

  1. Если таблица содержит нулевые значения, за исключением нулей в конце, результаты все равно должны быть правильными. Это не работает при использовании стандартного tarantool_sort, и это нельзя исправить, выполнив сравнение, которое проверяет, равны ли значения a и b нулю. (Прежде чем пробовать определенные предложения в Интернете, проверьте {1, nil, 2, -1, 44, 1e308, nil, 2, nil, nil, 0}.)
  2. Если строки должны быть отсортированы с учетом языка, должен быть параметр для сравнения символов.
  3. Если в таблице есть разные типы, то они должны быть отсортированы так: логические, затем числа, затем строки, а затем байтовые массивы.

Поскольку все эти функции доступны в спейсах Tarantool, решение простое: создайте временный спейс в Tarantool, поместите в него содержимое таблицы, извлеките из него кортежи по порядку и перезапишите таблицу.

Тогда tarantool_sort() сделает то же самое, что и table.sort, но с этими дополнительными функциями. Это не быстрый способ, который требует прав на базу данных, поэтому его следует использовать только при необходимости дополнительных функций.

Пример:

function tarantool_sort(input_table, collation)    local c = collation or 'binary'    local tmp_name = 'Temporary_for_tarantool_sort'    pcall(function() box.space[tmp_name]:drop() end)    box.schema.space.create(tmp_name, {temporary = true})    box.space[tmp_name]:create_index('I')    box.space[tmp_name]:create_index('I2',                                     {unique = false,                                      type='tree',                                      parts={{2, 'scalar',                                              collation = c,                                              is_nullable = true}}})    for i = 1, table.maxn(input_table) do        box.space[tmp_name]:insert{i, input_table[i]}    end    local t = box.space[tmp_name].index.I2:select()    for i = 1, table.maxn(input_table) do        input_table[i] = t[i][2]    end    box.space[tmp_name]:drop()  end

Например, предположим, что t = {1, 'A', -88.3, nil, true, 'b', 'B', nil, 'À'}.

После tarantool_sort(t, 'unicode_ci') таблица t содержит {nil, nil, true, -88.3, 1, 'A', 'À', 'b', 'B'}.