Перейти к содержимому
  • 0
1kovand1

Что такое for in pairs

Вопрос

А то в официальной документации ничего не понятно

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

А то в официальной документации ничего не понятно

 

вот тебе сделал минигайдик, хотя в документации (ссылочек куча у нас на сайте в сайдбаре) это все разжевано и так уже. 

 

Код:

local t = {a='bob',b='vasya',c='petya',d=nil, e={3, 5, y='NEO'}; 10, 20, 30, nil, 90}
local n=0
local str1, str2='qwerty', 'йцукен'

for k,v in pairs(t) do
   print(k,'-->',v)
   n=n+1
end

print('------------------')
print('Длинна списка вместе с записями', n)
print(t.e[2])
print(t.e['y'])
print(t['a'])
print(t.a)

print('----------------')
for i = 1, #t do
  print(t[i])
end

print('--Оператор длины--')
print('Длинна списка (непрерывной последовательности)', #t)
print('Строка 1=', #str1,'Строка 2=', #str2) --в байтах

Выхлоп:

 

1	-->	10
2	-->	20
3	-->	30
5	-->	90
a	-->	bob
b	-->	vasya
e	-->	table: 0x1c06be0
c	-->	petya
------------------
Длинна списка вместе с записями	8
5
NEO
bob
bob
----------------
10
20
30
nil
90
--Оператор длины--
Длинна списка (непрерывной последовательности)	5
Строка 1=	6	Строка 2=	12

Заметь, вышеупомянутый тобой цикл (итератор) выведет(переберет) ВСЕ ключи-значения в таблице, опуская поля, равные nil. Обрати внимание, что цикл выводит ключи-значения для числовых индексов по порядку, в отличии от записей.

Оператор длины # юзай аккуратно, так как он ищет только непрерывную последовательность числовых индексов. В старину еще в таблицу раньше для удобства добавляли общепринятое поле n, где ему присваивали количество элементов таблицы.

 

Таблица вида 

t ={12, 78, 20, nil, 45, nil}

оператором длины будет определена, как #t --> 3

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Часть кода моей новой проги:

for i,j in pairs (control.keys) do
	j()
end

Цикл 

for i,j in pairs (таблица) do end

 работает столько раз, сколько ячеек в таблице.

При этом каждый раз выводит ключ i и значение j. В данном случае я в таблице храню функции, а ключ - это клавиши, вроде "f" и прочие для управления.

Изменено пользователем qwertyMAN

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Часть кода моей новой проги:

for i,j in pairs (control.keys) do	j()end
Цикл

for i in pairs (таблица) do end
работает столько раз, сколько ячеек в таблице.

При этом каждый раз выводит ключ i и значение j. В данном случае я в таблице храню функции, а ключ - это клавиши, вроде "f" и прочие для управления.

 

плохой код, ты не используемую переменную i создаешь, а еще стиль кода плохой.

Изменено пользователем LeshaInc

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

плохой код, ты не используемую переменную i создаешь, а еще стиль кода плохой.

По одной строчке судишь о коде  :lol:

Да это просто пример. Я немного добавил от себя, чтобы показать игроку что кроме самого значения возвращается и ключ i. А то не поймёт и будет нубить.

Изменено пользователем qwertyMAN

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

По одной строчке судишь о коде  :lol:

Да это просто пример. Я немного добавил от себя, чтобы показать игроку что кроме самого значения возвращается и ключ i. А то не поймёт и будет нубить.

 

одна строка это уже код. ключ принято называть не i, а k.

pairs  дает ключ (key) и значение (value) k, v

ipairs дает индекс (index) и значение (value) i, v

Изменено пользователем LeshaInc

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Раз уж на то пошло, что такое

ipairs

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

если не ошибаюсь, то это lua аналог foreach. Перебирает элементы, выводя ключ=>значение

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

одна строка это уже код. ключ принято называть не i, а k.

pairs  дает ключ (key) и значение (value) k, v

ipairs дает индекс (index) и значение (value) i, v

Да ладно тебе, у меня в оригинале вообще нет переменной i. Написал только лишь для примера. И это не принципиально в трёх строках использовать именно k и v. Что мешает использовать j? Там всего 3 строки, не кто не запутается в трёх строках если я локальную переменную назову вместо v - j. Могу хоть func назвать, это моё дело. Такое название даже больше подошло бы чем v которое общепринятое.

Изменено пользователем qwertyMAN

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ещё есть next(таблица, ключ или nil) → следующая, или первая в случае отсутствия второго аргумента, пара ключ-значение.Иногда бывает полезна.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...