manawydan Posted December 12, 2014 Share Posted December 12, 2014 so iam try make this: local t = {5,nil,2,nil,3} change to this t = {5,2,3} i try make this but no work function orderTable(t) local nt = {} local c = 0 for k,v in ipairs(t) do if(v ~= nil)then c = c +1 print(c) table.insert(nt,v) end end return nt end addCommandHandler("ta", function() local t = {5,nil,2,nil,3} j = orderTable(t) for k,v in ipairs(j)do print(tostring(v)) end end) any help? Link to comment
Dealman Posted December 12, 2014 Share Posted December 12, 2014 Check if the value is nil. If it is, use table.remove. table.remove(theTable, theIndex); Link to comment
DiSaMe Posted December 12, 2014 Share Posted December 12, 2014 'ipairs' iterates up to first nil value. Which means no subsequent values are processed in your code. Link to comment
manawydan Posted December 12, 2014 Author Share Posted December 12, 2014 thanks, what I could do? use pairs? Link to comment
MTA Team 0xCiBeR Posted December 13, 2014 MTA Team Share Posted December 13, 2014 Yes, the solution is to use pairs as ipairs uses an iterator that only returns pairs of values attributed to numerical keys. This means that they can only return values defined in list format. In addition, if ipairs encounters any nil value, it will stop in its tracks, pairs, on the other hand, iterates through the entire table and returns keys that are non-numerical as well, so that's why you can't use ipairs to do the job. Hope it helps. Link to comment
DiSaMe Posted December 13, 2014 Share Posted December 13, 2014 Also, while ipairs starts at key 1 and increases it, pairs loops through the table in unspecified order. Link to comment
manawydan Posted December 13, 2014 Author Share Posted December 13, 2014 thanks guys! Link to comment
manawydan Posted December 13, 2014 Author Share Posted December 13, 2014 i try make one new code and work function orderTable(t) local nt = {} for i=1,#t do if(t[i] ~= nil)then table.insert(nt,t[i]) end end return nt end Link to comment
Buffalo Posted December 13, 2014 Share Posted December 13, 2014 # won't return correct items count, because they are not in order just use your script with pairs function orderTable(t) local nt = {} for k,v in pairs(t) do table.insert(nt,v) end return nt end Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now