Jump to content

Como puedo loopear una tabla como esta?


Rose

Recommended Posts

¿Cómo podría hacer para que me salga así en una gridlist? 

Columna 1: Nombres.

Columna 2: ID del objeto.

La cosa es que para no crear una tabla para cada cosa que necesito, quisiera hacerlo así: 

local table = {
  
  ['mascaras'] = 
  {
    ['name'] = "Jack", ['id'] = 1310
  } 
  
} 

Pues quiero saber cómo puedo hacer para que me aparezca como ya dije arriba en la gridlist.

Nombre.  ID

Jack.       1310

Link to comment

Quizás esto te pueda servir como para guiarte, no sé si es lo que buscabas
 

gridlist = guiCreateGridList(9, 26, 420, 254, false)
guiGridListAddColumn(gridlist, "Name", 0.5)
guiGridListAddColumn(gridlist, "Item", 0.5)

local table = 	{
				--{Nombre, Item}
				{"Name_1", "Item_1"},
				{"Name_2", "Item_2"},
				{"Name_3", "Item_3"},
				{"Name_4", "Item_4"}
				}
				
for i, v in pairs(table) do
	local r = guiGridListAddRow ( gridlist )
	guiGridListSetItemText(gridlist, r, 1, tostring ( v[1] ), false, false)
	guiGridListSetItemText(gridlist, r, 2, tostring ( v[2] ), false, false)
end

 

Link to comment
1 hour ago, #Dv^ said:

Quizás esto te pueda servir como para guiarte, no sé si es lo que buscabas
 


gridlist = guiCreateGridList(9, 26, 420, 254, false)
guiGridListAddColumn(gridlist, "Name", 0.5)
guiGridListAddColumn(gridlist, "Item", 0.5)

local table = 	{
				--{Nombre, Item}
				{"Name_1", "Item_1"},
				{"Name_2", "Item_2"},
				{"Name_3", "Item_3"},
				{"Name_4", "Item_4"}
				}
				
for i, v in pairs(table) do
	local r = guiGridListAddRow ( gridlist )
	guiGridListSetItemText(gridlist, r, 1, tostring ( v[1] ), false, false)
	guiGridListSetItemText(gridlist, r, 2, tostring ( v[2] ), false, false)
end

 

De esa forma lo tengo, pero resulta que tengo un venta de objetos, y antes de comprar estos objetos tienes que elegir una categoria(mascaras, anillos, lentes), eso ya lo tengo hecho, cuando eliges una categoría se crea una gui y te marca los objetos que hay. 

Mi pregunta es, si tengo que crear una tabla para cada categoría o puedo hacer una tabla y asignar un nombre de la forma que puse arriba. No sé si me estoy explicando bien... 

Tengo que hacer esto:

mascaras =

{

lentes =

{

(crearlas por separado) 

O puedo hacer algo como esto:

Tipos = 

{

['mascaras'] = 1310,1550,

['lentes']= 842

(lo que quisiera hacer, pero no sé cómo hacer para sacar los datos de máscaras solamente) 

PD: tampoco sé si la estructura de la tabla sea correcta, pero creo que entienden más o menos lo que quiero

Link to comment
3 hours ago, Hit+ said:

De esa forma lo tengo, pero resulta que tengo un venta de objetos, y antes de comprar estos objetos tienes que elegir una categoria(mascaras, anillos, lentes), eso ya lo tengo hecho, cuando eliges una categoría se crea una gui y te marca los objetos que hay. 

Mi pregunta es, si tengo que crear una tabla para cada categoría o puedo hacer una tabla y asignar un nombre de la forma que puse arriba. No sé si me estoy explicando bien... 

Tengo que hacer esto:

mascaras =

{

lentes =

{

(crearlas por separado) 

O puedo hacer algo como esto:

Tipos = 

{

['mascaras'] = 1310,1550,

['lentes']= 842

(lo que quisiera hacer, pero no sé cómo hacer para sacar los datos de máscaras solamente) 

PD: tampoco sé si la estructura de la tabla sea correcta, pero creo que entienden más o menos lo que quiero

Quizás algo como esto te referís

 

gridlist = guiCreateGridList(9, 26, 420, 254, false)
guiGridListAddColumn(gridlist, "Name", 0.5)

local table_category = 
    { 
  		--[Categoría] = { { "Nombre", "ID" } },
        [ "Category_1" ] = { {"Name_1", 1},{"Name_2", 2},{"Name_3", 3}}, 
        [ "Category_2" ] = { {"Name_3", 1},{"Name_4", 2},{"Name_5", 3}}
    } 
										
for i, v in pairs ( table_category ) do 
    local r = guiGridListAddRow ( gridlist ) 
    guiGridListSetItemText ( gridlist, r, 1, tostring ( i ), false, false )  
end 

addEventHandler("onClientGUIDoubleClick", guiRoot,
	function()
		if ( source == gridlist ) then
            local row, col = guiGridListGetSelectedItem ( source ) 
            if ( row and col and row ~= -1 and col ~= -1 ) then 
				local category = guiGridListGetItemText ( source, row, 1 ) 
				guiGridListClear ( gridlist ) 
				guiGridListAddColumn(gridlist, "ID", 0.5)
				if ( table_category [ category ] ) then 
					for _, id in ipairs ( table_category [ category ] ) do 
						local row = guiGridListAddRow ( gridlist ) 
						guiGridListSetItemText ( gridlist, row, 1, tostring ( id[1] ), false, false ) 
						guiGridListSetItemText ( gridlist, row, 2, tostring ( id[2] ), false, false ) 
					end 
				end 
			end 
		end
	end
)

 

Edited by #Dv^
Link to comment
12 hours ago, #Dv^ said:

Quizás algo como esto te referís

 


gridlist = guiCreateGridList(9, 26, 420, 254, false)
guiGridListAddColumn(gridlist, "Name", 0.5)

local table_category = 
    { 
  		--[Categoría] = { { "Nombre", "ID" } },
        [ "Category_1" ] = { {"Name_1", 1},{"Name_2", 2},{"Name_3", 3}}, 
        [ "Category_2" ] = { {"Name_3", 1},{"Name_4", 2},{"Name_5", 3}}
    } 
										
for i, v in pairs ( table_category ) do 
    local r = guiGridListAddRow ( gridlist ) 
    guiGridListSetItemText ( gridlist, r, 1, tostring ( i ), false, false )  
end 

addEventHandler("onClientGUIDoubleClick", guiRoot,
	function()
		if ( source == gridlist ) then
            local row, col = guiGridListGetSelectedItem ( source ) 
            if ( row and col and row ~= -1 and col ~= -1 ) then 
				local category = guiGridListGetItemText ( source, row, 1 ) 
				guiGridListClear ( gridlist ) 
				guiGridListAddColumn(gridlist, "ID", 0.5)
				if ( table_category [ category ] ) then 
					for _, id in ipairs ( table_category [ category ] ) do 
						local row = guiGridListAddRow ( gridlist ) 
						guiGridListSetItemText ( gridlist, row, 1, tostring ( id[1] ), false, false ) 
						guiGridListSetItemText ( gridlist, row, 2, tostring ( id[2] ), false, false ) 
					end 
				end 
			end 
		end
	end
)

 

Muchas gracias, eso era lo que quería, me ahorra bastantes lineas ya que son varios objetos para cada categoría. Pero tengo una pregunta, las categorías en la gridlist aparecen aleatoriamente, quizás por el 'pairs', pero cuando se lo cambió a ipairs no aparece nada en la gridlist.

local table_category = 
    { 
  		--[Categoría] = { { "Nombre", "ID" } },
        [ "Gorros" ] = { {"Sombrero", 1},{"Name_2", 2},{"Name_3", 3}}, 
        [ "Gorras" ] = { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}, 
		[ "Lentes" ] = { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}, 
		[ "Relojes" ] = { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}, 
		[ "Mochilas" ] = { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}, 
		[ "Mascaras" ] = { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}, 
		[ "Armas de mentira" ] = { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}, 
		[ "Otros" ] = { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}
    } 

-- Quiero que esta tabla aparezca asi:

	--[[
	Gorros
	Gorras
	Lentes
	..etc
	]]
-- Pero me aparece así: 

	--[[
	Lentes
	Otros
	Mascaras
	Mochilas
	etc...
	]]

Y así lo tengo:

-- // De esta forma me funciona, pero aparecen en la grid de forma random, por obvias razones...
for i, v in pairs ( table_category ) do 
	local r = guiGridListAddRow ( GRIDs ) 
	guiGridListSetItemText ( GRIDs, r, 1, tostring ( i ), false, false )  
end 

-- // Pero si cambio el pairs por ipairs no me aparece nada en la gridlist
for i, v in ipairs ( table_category ) do 
	local r = guiGridListAddRow ( GRIDs ) 
	guiGridListSetItemText ( GRIDs, r, 1, tostring ( i ), false, false )  
end 

 

Link to comment

Entonces úsalo de esta manera

 

gridlist = guiCreateGridList(9, 26, 420, 254, false)
guiGridListAddColumn(gridlist, "Name", 0.5)

local table_category = 
    { 
  		--{ "Categoría, { { Nombre, ID } } }, 
        { "Category_1", { {"Name_1", 1},{"Name_2", 2},{"Name_3", 3}}},		
        { "Category_2", { {"Name_3", 1},{"Name_4", 2},{"Name_5", 3}}}
    } 
										
for i, v in ipairs ( table_category ) do 
    local r = guiGridListAddRow ( gridlist ) 
    guiGridListSetItemText ( gridlist, r, 1, tostring ( v[1] ), false, false ) 
end 

 

Link to comment

@#Dv^ gracias.

Otra cosa, cuando le doy click a las categorías no me salen lo que tiene que ser (los nombres y la ID que están en la tabla), no me aparece nada.

if ( table_category [ category ] ) then 
	for _, id in pairs ( table_category [ category ]) do 
		local row = guiGridListAddRow ( GRIDs ) 
		guiGridListSetItemText ( GRIDs, row, 1, id[1], false, false ) 
	end 
end 

 

Link to comment
1 hour ago, Hit+ said:

@#Dv^ gracias.

Otra cosa, cuando le doy click a las categorías no me salen lo que tiene que ser (los nombres y la ID que están en la tabla), no me aparece nada.


if ( table_category [ category ] ) then 
	for _, id in pairs ( table_category [ category ]) do 
		local row = guiGridListAddRow ( GRIDs ) 
		guiGridListSetItemText ( GRIDs, row, 1, id[1], false, false ) 
	end 
end 

 

El formato de la tabla cambió, por eso, eso ya no te sirve.

function getIndexFromCategory (category)
  for k, v in ipairs(table_category) do
    if ( v == category ) then
      return k
    end
  end
  return false
end
local index = getIndexFromCategory(category)

if ( index ) then
  for _, id in ipairs ( table_category[index][2] ) then
    local row = guiGridListAddRow ( GRIDs )
    guiGridListSetItemText ( GRIDs, row, 1, id[1], false, false ) 
  end
end

 

  • Like 1
Link to comment
21 hours ago, Tomas said:

El formato de la tabla cambió, por eso, eso ya no te sirve.


function getIndexFromCategory (category)
  for k, v in ipairs(table_category) do
    if ( v == category ) then
      return k
    end
  end
  return false
end

local index = getIndexFromCategory(category)

if ( index ) then
  for _, id in ipairs ( table_category[index][2] ) then
    local row = guiGridListAddRow ( GRIDs )
    guiGridListSetItemText ( GRIDs, row, 1, id[1], false, false ) 
  end
end

 

No me funciona...

local table_category = 
    { 
  		--[Categoría] = { { "Nombre", "ID" } },
        { "Gorros",  { {"Sombrero", 1},{"Name_2", 2},{"Name_3", 3}}}, 
        { "Gorras" , { {"Jockey", 1550},{"Name_4", 2},{"Name_5", 3}}}, 
		{ "Lentes" ,  { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}}, 
		{ "Relojes" , { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}}, 
		{ "Mochilas",  { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}}, 
		{ "Mascaras",  { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}}, 
		{ "Armas de mentira", { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}}, 
		{ "Otros",   { { "Jockey", 1},{"Name_4", 2},{"Name_5", 3}}}
		

    }      
	
function getIndexFromCategory (category)
	for k, v in ipairs(table_category) do
		if ( v == category ) then
			return k
		end
	end
	return false
end

-- Desde aquí lo tengo en la función donde se da click en 'GRIDs'
local category = guiGridListGetItemText ( source, row, 1 ) 
local index = getIndexFromCategory(category)

if ( index ) then
  for _, id in ipairs ( table_category[index][2] ) do
	local row = guiGridListAddRow ( GRIDs )
	guiGridListSetItemText ( GRIDs, row, 1, id[1], false, false ) 
  end
end

 



Edited by Hit+
Link to comment
gridlist = guiCreateGridList(500, 26, 420, 254, false)
guiGridListAddColumn(gridlist, "Name", 0.5)
showCursor(true)

local table_category = 
    { 
  		--[Categoría] = { { "Nombre", "ID" } },
        { "Gorros",  { {"Gorros", 1},{"Name_2", 2},{"Name_3", 3}}}, 
        { "Gorras" , { {"Gorras", 1550},{"Name_4", 2},{"Name_5", 3}}}, 
		{ "Lentes" ,  { {"Lentes", 1},{"Name_4", 2},{"Name_5", 3}}}, 
		{ "Relojes" , { {"Relojes", 1},{"Name_4", 2},{"Name_5", 3}}}, 
		{ "Mochilas",  { {"Mochilas", 1},{"Name_4", 2},{"Name_5", 3}}}, 
		{ "Mascaras",  { {"Mascaras", 1},{"Name_4", 2},{"Name_5", 3}}}, 
		{ "Armas de mentira", { {"Armas de mentira", 1},{"Name_4", 2},{"Name_5", 3}}}, 
		{ "Otros",   { { "Otros", 1},{"Name_4", 2},{"Name_5", 3}}}
		

    }    

for i, v in ipairs ( table_category ) do 
    local r = guiGridListAddRow ( gridlist ) 
    guiGridListSetItemText ( gridlist, r, 1, tostring ( v[1] ), false, false ) 
end 

addEventHandler("onClientGUIDoubleClick", guiRoot,
	function()
		if ( source == gridlist ) then
			local row, col = guiGridListGetSelectedItem ( source ) 
			--outputChatBox(row)
			if ( row and col and row ~= -1 and col ~= -1 )  then
				guiGridListClear ( gridlist ) 
				guiGridListAddColumn(gridlist, "ID", 0.5)
				for _, v in ipairs ( table_category[row+1][2]) do 
					local row = guiGridListAddRow ( gridlist ) 
					guiGridListSetItemText ( gridlist, row, 1, v[1], false, false ) 
					guiGridListSetItemText ( gridlist, row, 2, v[2], false, false )
				end 
			end 
		end
	end
)

Espero te sirva como para guiarte, Saludos

Edited by #Dv^
  • Like 1
Link to comment
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...