आप table.remove
हैं:
local t = {1,2,3,4}
local head = table.remove(t,1)
print(head)
--> 1
print(#t)
--> 3
print(t[1])
--> 2
@daurnimator बताते हैं, यह लुआ क्रम में सरणियों के अंतर्निहित कार्यान्वयन, सभी तालिका तत्वों के स्थानांतरण द्वारा प्रयास का एक बहुत आवश्यकता है। आप इसके बजाय अपने सरणियों पीछे की ओर का प्रतिनिधित्व करते हैं, सरणी head
में अंतिम आइटम बुला सकते हैं, तो table.remove()
करने के लिए कॉल एक सस्ते पॉप होगा:
local t = {4,3,2,1}
local head = table.remove(t)
print(head)
--> 1
print(#t)
--> 3
print(t[#t])
--> 2
वैकल्पिक रूप से, आप के रूप में एक linked list तत्वों के अपने अनुक्रम का प्रतिनिधित्व करने के लिए चुन सकते हैं । इस मामले में, सूची के सिर बंद एक आइटम पॉपिंग भी एक सस्ते ऑपरेशन है (लेकिन अंत पर एक जोर दे, नहीं है जब तक कि आप अपनी सूची में 'पूंछ' का ट्रैक रखने के):
local setm,getm = setmetatable,getmetatable
local linkedlist=setm({__index={
tail = function(l) while l.rest do l=l.rest end return l end, -- N.B. O(n)!
push = function(l,v,t) t=l:tail() t.rest=setm({val=v},getm(l)) return t end,
cram = function(l,v) return setm({val=v,rest=l},getm(l)) end,
each = function(l,v)
return function() if l then v,l=l.val,l.rest return v end end
end
}},{ __call=function(lmeta,v,...)
local head,tail=setm({val=v},lmeta) tail=head
for i,v in ipairs{...} do tail=tail:push(v) end
return head
end })
local numbers = linkedlist(1,2,3,4)
for n in numbers:each() do print(n) end
--> 1
--> 2
--> 3
--> 4
local head,rest = numbers.val, numbers.rest
print(head)
--> 1
for n in rest:each() do print(n) end
--> 2
--> 3
--> 4
local unrest = rest:cram('99')
for n in unrest:each() do print(n) end
--> 99
--> 2
--> 3
--> 4
नोट विशेष रूप से
किसी भी डाटा संरचनाओं संशोधित नहीं करता है कि लेकिन केवल आपके श्रृंखला में एक विशेष लिंक पर एक rest
संभाल देता है।
नोट, किसी भी उचित आकार की सरणी के लिए, यह एक बहुत ही धीमी गति से संचालन है; कोशिश करें और पुनर्विचार करें कि आप ऐसा क्यों करना चाहते हैं ... – daurnimator
@daurnimator का मतलब है "_any unreasonable_ size" की सरणी बी-) –
इसके लिए प्रेरणा पर पुनर्विचार करने के बजाय, शायद किसी सरणी के अलावा डेटा संरचना का उपयोग करने पर विचार करें। एक लिंक की गई सूची (लुआ में बनाने में आसान) प्रत्येक नोड के लिए आवश्यक अधिक संग्रहण की कीमत पर, यह एक सस्ता ऑपरेशन बनाती है। – Phrogz