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

remove player from table?

okay, I made this so when a the game assigns teams, the names are inserted into a table called "houseguests". My question is, how would i remove a certain player's name from the table?

function AssignTeam()
	local team = Instance.new("Team")
	team.Parent = game.Teams
	team.Name = "Houseguests"
	team.TeamColor = BrickColor.new(330)
	team.AutoAssignable = false
	local player = game.Players:GetPlayers()
	local players = game.Players:GetChildren()
	for i,v in pairs(player) do
		v.TeamColor = BrickColor.new(330)
	end
	for i,v in pairs(players) do
		table.insert(houseguests, v.Name)
	end
end

1 answer

✓ Accepted answer

Setting the index to nil

One of the most common ways of removing a value from a table is simply setting it's value to nil. This will completely erase the value's existence and recognition with the script, thus completely removing it. This is done via the following example:

local Array = {'hello','world'}

-- I gave a source below of a question about tables in which I explain arrays
-- This code simply indexed the table for the second value ('world'), and sets it to nil (removing it from the table)

Array[2] = nil -- "world" is now removed

-- Now if we try to print it...
print(Array[2]) -- "nil"

Clearing a table?

An extension of this example could be making a function that wipes all data in an array. Here's an example:

local tab = {"hello","i","am","steve"}

local function ClearTable(t)
	for i = 1,#t do
		t[i] = nil -- Set the current index to nil
	end
end

print(unpack(tab)) -- > "hello i am steve"

ClearTable(tab) -- run the function

print(unpack(tab)) -- "" (nothing)

table.remove

There's one handy function of the table library called remove. This function consists of 2 arguments:

  1. The table you're modifying
  2. The numeric key you're removing

Now, because we can only pass a number as the second argument of table.remove, this implies our table must be an array. If you don't know what an array is, I explain a bit more about it in this question: https://scriptinghelpers.org/questions/25964/what-are-tables#29555

Now, this function actually has an extra mechanic to it than just removing a value from a table. Once removing a value from a table with this function, it will actually replace that index value with the key that's after it. Here's an example:

local test = {"hello","i","am","steve"}

table.remove(test,2) -- remove "i" from the array

print(test[2]) -- this will print "am", since it was the next value after "i" (which was just removed)

So this function removes the value, with the addition of moving all other elements down the list, replacing the removed value. This is different from just manually setting the index to nil, where manually setting the index to nil leaves a blank space open as nil, where a value used to be. Here's an example demonstrating that:

local text = {"hello","world","i","like","pie"}

-- table.remove
table.remove(text,2)
print(text[2]) -- "i"

-- removing index
text[2] = nil
print(text[2]) -- "nil"

Your question

Applying all this information, here's a scenario which fits your question:

local players = {"player1","player2","player3","player4","player5"}

local function RemovePlayer(tab,playerName)
	for i = 1,#players do
		local v = players[i] -- get the current value
		if v == playerName then
			table.remove(tab,i) -- remove it
			-- or tab[i] = nil
		end
	end
end

RemovePlayer(players,"player2")

print(players[2]) -- > "player3" (since we used table.remove, it removed the second value in the table and pushed all the other elements down by 1 to fill the nil values place)

Hope this helped, let me know if you have any questions.

1 comment

0

thank you so much! it did :D

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