Длина таблицы

Страницы: 1
RSS
Длина таблицы
 
Код
tab = {[1]=1, [2]=2, [3]=3, [4]=4, [5]=5, [6]=6, [8]=8, [9]=9}

Согласно документации, длина такой таблицы (#tab) должна быть 6, но у меня показывает 9.
Это ошибка в документации или в самом Lua/QLUA?
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Старатель пишет:
Код
 tab = {[1]=1, [2]=2, [3]=3, [4]=4, [5]=5, [6]=6, [8]=8, [9]=9} 

Согласно документации , длина такой таблицы (#tab) должна быть 6 , но у меня показывает 9 .
Это ошибка в документации или в самом Lua/QLUA?
Ошибки нет.


The length of a table t is defined to be ANY integer index n such that t[n] is not nil and t[n+1] is nil; moreover, if t[1] is nil, n can be zero. For a regular array, with non-nil values from 1 to a given n, its length is exactly that n, the index of its last value. If the array has "holes" (that is, nil values between other non-nil values), then #t can be ANY of the indices that directly precedes a nil value (that is, it may consider any such nil value as the end of the array).

Я выделил слово ANY из вашей документации большими буквами.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
s_mike@rambler.ru,
Во-первых, документация не моя. Это официальная документация.
Во-вторых, вы явно не поняли смысл этого "any":
Цитата
The length of a table t is defined to be any integer index n such that t[n] is not nil and t[n+1] is nil; moreover, if t[1] is nil, n can be zero. For a regular array, with non-nil values from 1 to a given n, its length is exactly that n, the index of its last value. If the array has "holes" (that is, nil values between other non-nil values), then #t can be any of the indices that directly precedes a nil value (that is, it may consider any such nil value as the end of the array).
Надо делать так, как надо. А как не надо - делать не надо.
 
Вот две таблицы:
Код
{[1]=1, [2]=2, [4]=4, [8]=8, [9]=9}
{[1]=1, [2]=2, [3]=3, [8]=8, [9]=9}
У первой длина 9, у второй 3.  :?:  Неожиданно...
Надо делать так, как надо. А как не надо - делать не надо.
 
Давайте я вам переведу.

Длина таблицы t определяется как ЛЮБОЙ числовой индекс, такой, что that t[n] ~= nil и  t[n+1] == nil

В вашем примере элемент с индексом 9 подходит под это определение?
Подходит. Результат #tab равен 9
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Во втором примере первым попался элемент с индексом 3. Он тоже подходит под определение.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
так и есть - они с Михаилом Булычевым - уже поднимали этот вопрос на старом форуме: --> http://forum-archive.quik.ru/forum/lua/117341/117351/#m117351
 
Получается использование оператора # для таблицы с целочисленными индексами не имеет смысла, если только достоверно не известно, что элементы таблицы заполнены без пропусков. В противном случае результат может быть не предсказуем.
Надо делать так, как надо. А как не надо - делать не надо.
 
дополню инфой из документации, ссылку дать не могу так как не помню.
-------------------
При работе VMLUA с таблицами происходит следующее.
--------------------
Элементы не проверяются на содержимое так как это замедляло бы работу.
---------------------
поэтому если элементу присвоить nil и он не последний,
то сборщик его не видит так как нет функции упаковки разряженных таблиц. т е элемент существует ,
а что внутри таблицы сборщик мусора никогда не проверяет.
Это существенно ускоряет вычисления.
Страницы: 1
Читают тему
Наверх