2015-01-16 4 views
3

Я пытаюсь подсчитать элементы в таблице, в которой есть некоторые элементы, индексированные со строками. Когда я пытаюсь использовать оператор #, он просто игнорирует индексированные строки. Пример:подсчет строковых индексированных таблиц в lua

local myTab = {1,2,3} 
print(#myTab) 

возвратит 3

local myTab = {} 
myTab["hello"] = 100 
print(#myTab) 

возвратит 0 смешивая их, я попытался

local myTab = {1,2,3,nil,5,nil,7} 
print(#myTab) 
myTab["test"] = try 
print(#myTab) 

вернулся 7, а затем 3, это правильно, потому что я где-то читал, что # оператор останавливается, когда находит нулевое значение (но тогда почему первая печатная версия 7?)

в прошлом, я попытался

local myT = {123,456,789} 
myT["test"] = 10 
print(#myT) 

печать 3, а не 4

Почему?

+1

Почему вы должны рассчитывать элементы в таблице? Какова проблема, которую вы пытаетесь решить? – lhf

+0

«Оператор # останавливается, когда находит нулевое значение» неверен. Это [Справочное руководство] (http://www.lua.org/manual/5.2/manual.html#3.4.6) объясняет это хорошо. –

ответ

2

Правило простое, из the length operator:

За исключением случаев, __len Метаметод не дается, длина таблицы t определяется только если таблица представляет собой последовательность, то есть множество его положительного числового ключи равны {1..n} для некоторого неотрицательного целого n. В этом случае n - его длина.

В вашем примере:

local myTab = {1,2,3,nil,5,nil,7} 

#mytab не определен, поскольку myTab не является последовательностью, с или без myTab["test"] = try.

local myT = {123,456,789} 

myT представляет собой последовательность, а длина 3, с или без myT["test"] = 10

+0

спасибо, но тогда какой правильный способ их посчитать? –

+1

@FedericoFallico: Вручную, итерацией по ним всем. – Deduplicator

Смежные вопросы