Module Script printing not in order

Does anyone know why the output of this code is always the same?
i mean, i thought this script vould print everything starting from Npc1 to Npc8

local NpcInfos = {
	
	["Npc1"] = {
		["Name"] = "Name",
		["Surname"] = "Surname",
		["Age"] = math.random(20,80),
		["Gender"] = math.random(1,2)
	};
	
	["Npc2"] = {
		["Name"] = "Name",
		["Surname"] = "Surname",
		["Age"] = math.random(20,80),
		["Gender"] = math.random(1,2)
	};
	
	["Npc3"] = {
		["Name"] = "Name",
		["Surname"] = "Surname",
		["Age"] = math.random(20,80),
		["Gender"] = math.random(1,2)
	};
	
	["Npc4"] = {
		["Name"] = "Name",
		["Surname"] = "Surname",
		["Age"] = math.random(20,80),
		["Gender"] = math.random(1,2)
	};
	
	["Npc5"] = {
		["Name"] = "Name",
		["Surname"] = "Surname",
		["Age"] = math.random(20,80),
		["Gender"] = math.random(1,2)
	};
	
	["Npc6"] = {
		["Name"] = "Name",
		["Surname"] = "Surname",
		["Age"] = math.random(20,80),
		["Gender"] = math.random(1,2)
	};
	
	["Npc7"] = {
		["Name"] = "Name",
		["Surname"] = "Surname",
		["Age"] = math.random(20,80),
		["Gender"] = math.random(1,2)
	};
	
	
	["Npc8"] = {
		["Name"] = "Name",
		["Surname"] = "Surname",
		["Age"] = math.random(20,80),
		["Gender"] = math.random(1,2)
	}
}


return NpcInfos

Other Script

NpcData = require(script.Parent)

for keyName, keyValue in pairs(NpcData) do

print(keyName,keyValue.Name,keyValue.Surname)

end

Output
1

Dictionaries are not ordered. Do not rely on order when using keys. Use arrays instead.

1 Like

The dictionary part of a table has no notion of order.

Use an array of dictionaries instead.

local NpcInfos = {
	{
		["Name"] = "Name",
		["Surname"] = "Surname",
		["Age"] = math.random(20,80),
		["Gender"] = math.random(1,2)
	},
	{
		["Name"] = "Name",
		["Surname"] = "Surname",
		["Age"] = math.random(20,80),
		["Gender"] = math.random(1,2)
	},
	{
		["Name"] = "Name",
		["Surname"] = "Surname",
		["Age"] = math.random(20,80),
		["Gender"] = math.random(1,2)
	},
	{
		["Name"] = "Name",
		["Surname"] = "Surname",
		["Age"] = math.random(20,80),
		["Gender"] = math.random(1,2)
	},
	{
		["Name"] = "Name",
		["Surname"] = "Surname",
		["Age"] = math.random(20,80),
		["Gender"] = math.random(1,2)
	},
	{
		["Name"] = "Name",
		["Surname"] = "Surname",
		["Age"] = math.random(20,80),
		["Gender"] = math.random(1,2)
	},
	{
		["Name"] = "Name",
		["Surname"] = "Surname",
		["Age"] = math.random(20,80),
		["Gender"] = math.random(1,2)
	},
	{
		["Name"] = "Name",
		["Surname"] = "Surname",
		["Age"] = math.random(20,80),
		["Gender"] = math.random(1,2)
	}
}

return NpcInfos

Then when iterating:

local NpcInfos = require(script.Parent)

for pos, npc in ipairs(NpcInfo) do
    print(pos, npc.Name, npc.Surname)
end

This worked, thank you both guys! :smiley: