Sign in to follow this  
GM_Goulart

[PEDIDO DE TUTORIAL] Pra serve for k,v...?

Recommended Posts

Iniciei no script faz pouco tempo. Queria saber qual é a função de for k,v (table) , para que serve, for só pega dois valores de uma tabela? Exemplos que posso utilizar com for obrigado desde de já.

 

Quem puder me ajuda receberá thanks.

Share this post


Link to post

for é um loop. Se vc tivesse estudado lógica de programação primeiro, saberia disso.

Spoiler

Os exemplos abaixo podem ser testados client-side ou server-side.


-- LOOP NUMÉRICO
for i=1, 10 do -- Faz um loop que incrementa o i em +1 a cada execução e vai até 10.
	outputChatBox (i) -- Vai executar 10 vezes, na primeira vez o i vale 1, depois vale 2, depois 3 e assim por diante até atingir o limite de 10.
end

for i=3, 10 do -- Faz um loop que incrementa o i em +1 a cada execução e vai até 10.
	outputChatBox (i) -- Vai executar 8 vezes, na primeira vez o i vale 3, depois vale 4, depois 5 e assim por diante até atingir o limite de 10.
end

for i=1, 10, 2 do -- Faz um loop que incrementa o i em +2 a cada execução e vai até 10. (neste exemplo ele para em 9, pois o valor seguinte ultrapassa o limite de 10)
	outputChatBox (i) -- Vai executar 5 vezes, na primeira vez o i vale 1, depois vale 3, depois 5 e assim por diante até atingir o limite de 10.
end

for i=2, 10, 5 do -- Faz um loop que incrementa o i em +5 a cada execução e vai até 10. (neste exemplo ele para em 6, pois o valor seguinte ultrapassa o limite de 10)
	print (i) -- Vai executar 2 vezes, na primeira vez o i vale 2, depois vale 7 e a terceira vez não é executada pois valeria 12.
end

-- LOOP GENÉRICO (ou iterador)
local myTable = {"um", 2, "03"} -- Tabela qualquer com elementos de tipos diferentes. Note que declarei ela sem índices, mas o MTA considera ela automaticamente como essa abaixo: (indexar = colocar índices, os números que estão entre os colchetes [])
--[[O fato de estar na vertical ou na horizontal é irrelevante, coloquei na vertical apenas para facilitar o entendimento.

local myTable = {
	[1] = "um",
	[2] = 2,
	[3] = "03"
}

]]

for i, value in ipairs (myTable) do -- Faz um loop que incrementa o i em +1 a cada execução. Termina quando não existir um índice igual ao i na myTable ou quando não há item nenhum neste índice. (vale lembrar que ipairs só funciona para tables que tenham os índices como inteiros)
	outputChatBox (value) -- Executa 3 vezes, pois quando o i for 4, não irá executar por não existir nenhum item com índice [4] na myTable. Na primeira execução, vai mostrar "um", depois "2" e por fim "03".
end

-- outro exemplo com índices não inteiros:
local myTable = {
	["AB"] = 1,
	["01"] = "2",
	["Sei lá"] = "03",
	[3.14] = "pi"
}

for i, value in pairs (myTable) do -- Faz um loop que repete o número de itens que existem em myTable. Se a table tem 4 itens, o loop executa 4 vezes.
	outputChatBox (i) -- Mostra um dos índices a cada execução sem seguir necessariamente a ordem que está em myTable. Pode mostrar "Sei lá" na primeira vez, depois "AB" na segunda, etc. O pairs não segue a ordem que está em myTable, pois não é possível determinar qual índice é maior que o outro. O mesmo ocorre se fizer com o 'value'.
end

-- exemplo com ERRO proposital
local myTable = { -- Table com um item ausente.
	[1] = "um",
	[2] = 2,
	[3] = "03",
	[4] = nil,
	[5] = "5"
}

for i, value in ipairs (myTable) do
	outputChatBox (i) -- Vai executar somente 3 vezes. Pois quando o índice for 4, o item não existe e ele não consegue executar, finalizando o loop no 3.
end

-- Outro exemplo com erro proposital
local myTable = { -- Table com um índice ausente.
	[1] = "um",
	[2] = 2,
	[3] = "03",
	[6] = "errou",
	[5] = "5"
}

for i, value in ipairs (myTable) do
	outputChatBox (i) -- Vai executar 3 vezes, pois quando o i for 4, não encontrará o índice [4] finalizando o loop no índice 3.
end

-- Exemplo final
local myTable = { -- Table com índices fora de ordem.
	[1] = "um",
	[3] = 2,
	[2] = "03",
	[5] = "quatro",
	[4] = "5"
}

for i, value in ipairs (myTable) do
	outputChatBox (i) -- Vai executar 5 vezes, na ordem dos índices. (não importa a ordem que foram declarados). Na primeira execução vai mostrar "1", depois "2", depois "3" e assim por diante até o 5.
end

 

 

Edited by Lord Henry
  • Thanks 1

Share this post


Link to post

Não está esquecendo de nada @GM_Goulart ?

On 07/11/2019 at 13:23, GM_Goulart said:

Quem puder me ajuda receberá thanks.

Pena que já lhe ajudaram, juro que fiquei super tentado com essa oferta. :-D

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.