Optimizing code to find the mode

Hello, so I was practicing with tables, numbers, and find the mode of a data set. I was looking to see how I could make this code shorter and more efficient. If there is, I don’t want something that can make it simple like table.___ I was looking at this and thought it could use a lot of improvement but didn’t know-how. Thanks!

local DataSet = {1,2,3,4,5,1,2,3,4}
local Amount = {}
local f = {}
local ab = 0
local AllSame = true;
local mode = ""


for i,v in pairs(DataSet) do
	if not Amount[tostring(v)]then
		Amount[tostring(v)] = 1
	else
		Amount[tostring(v)] = Amount[tostring(v)] + 1
	end
end
--end of amount set
for i,v in pairs(Amount) do
	if tonumber(v)>ab then
		ab=tonumber(v)
	end
	--warn(i,"..",v)
end
--end of top number
for i,v in pairs(Amount) do
	if tonumber(v)==ab then
		table.insert(f,tonumber(i))
	end
end
--end of adding all top numbers
for i,v in pairs(Amount) do
	if v<ab then
		AllSame = false
	end
end
--end of finding if all numbers are the same
if not AllSame then
	for i,v in pairs(f)do
		if #mode == 0 then
			mode = mode..tostring(v)
		else
			mode = mode..","..tostring(v)
		end
	end
	warn("The Mode of the data set is {"..mode.."}")
else
	warn("There is no mode")
end
--Putting it together

Because it’s an array, consider using ipairs, not much of a difference, but a micro-optimization. You also no need to use tostring, if you want to make it a string at the end, just call tostring once at the end.

3 Likes