Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

How would I make a pairs loop go in a random order?

Hi. How would I make a pairs loop go in a random order? For example, if I do:

for _,v in pairs(game.Workspace:GetChildren()) do
	print(v.Name)
end

It prints:

Terrain

Camera

Part

If I execute the command again, it prints in the same order. That's the issue. How would I go about making it random? Just a reminder, I'm not trying to pick a random child, I'm trying to make it print out of order as in complete randomness. Thank you!

1 answer

✓ Accepted answer

If you want to choose random indicies from an array, generally the best solution is to randomize the array before the iteration. There are many algorithms for randomizing, or "shuffling" arrays, the most popular probably being the Fisher–Yates shuffle.

Here's a Lua implementation:

local function randomize(t)
	local _t = {}

	-- make a copy of the original table
	for i = 1, #t do 
		_t [i] = _t [i]
	end

	-- shuffle the copied table randomly
	for i = #_t, 2, -1 do
		local j = math.random(i)
		_t[i], _t[j] = _t[j], _t[i]
	end

	return _t
end

Now, you just have to pass your array through this function then iterate over the result as you would normally. For example:

for _, v in next, randomize(workspace:GetChildren()) do
	print(v)
end

Let me know if you have any questions.

This discussion is preserved as it was. New answers, comments, and votes are closed.