2015-01-09 5 views
5

वाली लूआ तालिका को कैसे विभाजित करें मैं मूल तालिका को बदले बिना दो उप-तालिकाओं वाली लू तालिका को कैसे विभाजित कर सकता हूं।उप-टेबल

उदा। tbl = {{tbl1}, {tbl2}, {tbl3}, {tbl4}}subtbl1 = {{tbl1}, {tbl2}}, subtbl2 = {{tbl3}, {tbl4}} में tbl अपरिवर्तित रखते हुए विभाजित करें।

स्ट्रिंग में string.sub है, लेकिन यह नहीं पता कि तालिका में कुछ समान है या नहीं। मुझे नहीं लगता कि unpack मेरे मामले के लिए काम करता है, table.remove मूल tbl बदल देगा।

मेरा असली मामले के लिए अधिक जानकारी जोड़ना:

tbl रन-टाइम में उप-टेबल और उप-टेबल परिवर्तन की संख्या के साथ भरा है। मैं कुछ के लिए पहली 2 सब-टेबल रखना चाहता हूं और शेष उप-टेबल (एक तालिका में) को फ़ंक्शन में पास करना चाहता हूं।

+0

दूसरा फ़ंक्शन टेबल की एक तालिका (अनुक्रमणिका 1 से शुरू) की अपेक्षा करता है? आप 'tbl' को पहले * उप-टेबल * बस * रखना चाहते हैं? –

+0

हां, दूसरा फ़ंक्शन इंडेक्स 1 से शुरू होने वाली तालिकाओं की एक तालिका की अपेक्षा करता है लेकिन पहले दो उप-टेबलों को तालिका के रूप में आवश्यक नहीं है। मुझे केवल पहले दो सब-टेबल से जानकारी पुनर्प्राप्त करना होगा। – mile

उत्तर

6

आप विधि LHF सुझाव का उपयोग कर पहले दो उप-टेबल रख सकते हैं। आप शेष उप-टेबल unpack कर सकते हैं।

local unpack = table.unpack or unpack 

local t = { {1}, {2}, {3}, {4}, {5}, {6} } 

local t1 = { t[1], t[2] } -- keep the first two subtables 
local t2 = { unpack(t, 3) } -- unpack the rest into a new table 

-- check that t has been split into two sub-tables leaving the original unchanged 
assert(#t == 6, 't has been modified') 

-- t1 contains the first two sub-tables of t 
assert(#t1 == 2, 'invalid table1 length') 
assert(t[1] == t1[1], 'table1 mismatch at index 1') 
assert(t[2] == t1[2], 'table1 mismatch at index 2') 

-- t2 contains the remaining sub-tables in t 
assert(#t2 == 4, 'invalid table2 length') 
assert(t[3] == t2[1], 'table2 mismatch at index 1') 
assert(t[4] == t2[2], 'table2 mismatch at index 2') 
assert(t[5] == t2[3], 'table2 mismatch at index 3') 
assert(t[6] == t2[4], 'table2 mismatch at index 4') 
+1

'unpack' इंडेक्स शुरू करने और समाप्त करने के लिए तर्कों का समर्थन करता है, 'चयन' की आवश्यकता नहीं है। बस 'अनपैक (टी, 3) '। –

+0

@EtanReisner प्रतिक्रिया के लिए धन्यवाद। मैंने आपके सुझाव को शामिल करने के लिए अपना उत्तर अपडेट कर दिया है। – Adam

+0

धन्यवाद दोस्तों! {अनपैक (टी, 3)} मेरे मामले के लिए बहुत अच्छा है। – mile

2

इस प्रयास करें:

subtbl1 = { tbl[1], tbl[2] } 
subtbl2 = { tbl[3], tbl[4] } 
+0

धन्यवाद, लेकिन मेरा मामला अधिक जटिल है। मेरे पास असली मामला यह है कि मूल टीबीएल रन-टाइम पर उप-टेबल से भरा हुआ है। लक्ष्य पहले 2 को फ़ंक्शन में छोड़कर उप-टेबल को पास करना है, और पहले 2 उप-टेबल का उपयोग कहीं और किया जाता है, इसलिए मूल तालिका को भरने के बाद संशोधित होने की उम्मीद नहीं है। – mile