কিভাবে তার কী দ্বারা একটি লুয়া টেবিল এন্ট্রি সরান?


97

আমার একটি লুয়া টেবিল রয়েছে যা আমি হ্যাশম্যাপ হিসাবে ব্যবহার করি, যেমন স্ট্রিং কী সহ:

local map = { foo = 1, bar = 2 }

আমি এই টেবিলের কীটি দ্বারা চিহ্নিত এটির একটি উপাদান "পপ" করতে চাই। একটি table.remove()পদ্ধতি আছে, তবে এটি জেনেরিক কীটি নয় বরং সরানোর জন্য উপাদানটির সূচি গ্রহণ করে (অর্থাত্ একটি সংখ্যা)। আমি করতে সক্ষম হতে চাই table.remove(map, 'foo')এবং এখানে আমি এটি কার্যকর করেছি:

function table.removekey(table, key)
    local element = table[key]
    table[key] = nil
    return element
end

এটি করার আরও ভাল উপায় আছে কি?


4
+1 অত্যন্ত দরকারী প্রশ্নটির জন্য কারণ আপনি আমার যে "উত্তর" দিয়েছিলেন তা দিয়েছেন; "আরও ভাল" উপায় না থাকলেও।
আয়ান বয়ড

উত্তর:


84

না, কীটির মানটি সেট করা nilহ'ল একটি টেবিলের হ্যাশম্যাপ অংশে কোনও আইটেম সরিয়ে নেওয়ার গ্রহণযোগ্য উপায়। আপনি যা করছেন তা মানক। তবে, আমি ওভাররাইড না করার পরামর্শ দিচ্ছি table.remove()- কোনও টেবিলের অ্যারে অংশের জন্য, ডিফল্ট টেবিলটি সরান () কার্যকারিতাটিতে সূচকগুলিকে পুনর্নির্মাণের অন্তর্ভুক্ত করা হয়, যা আপনার ওভাররাইডটি করবে না। আপনি যদি tableফাংশন সেটে আপনার ফাংশনটি যুক্ত করতে চান , তবে আমি সম্ভবত এটির মতো table.removekey()বা অন্য কোনওটির নাম দেব ।


মোছা সম্পর্কে মতামতের জন্য ধন্যবাদ। ফাংশনটির নাম সম্পর্কে, এটি মূলত আমার বক্তব্য পরিষ্কার করার জন্য। আমি সাধারণত স্ট্যান্ডার্ড ফাংশনগুলিকে ওভাররাইড করি না। আমি অবশ্যই এই নামে এটি ব্যবহার করব না ( table.removekey()আমার সেরা পছন্দটিও হবে)।
উকুই 21

4
আপনি যদি এটি কেবলমাত্র একটি একক ব্লকের মধ্যে ব্যবহার করছেন, কেবল তার পরিবর্তে কেবল স্থানীয় ফাংশন করে আপনি পারফরম্যান্সের ভিত্তিতে আরও ভাল হয়ে উঠবেন (প্রতিটি কলের জন্য একটি বিশ্বব্যাপী অনুসন্ধানের ওভারহেড সংরক্ষণ করে)। আমি বেশ প্রায়ই আমদানি table.insertএবং table.removeস্থানীয় নামস্থান মধ্যে যদি আমি তাদের ব্যবহার করছি ঘন ঘন প্রায়ই ভালো কিছু যেমন tinsert()এবং tremove()
আম্বর

পারফরম্যান্স টিপ জন্য ধন্যবাদ। আমি স্থানীয় নামস্থানে প্রায়শই ব্যবহৃত ফাংশনগুলি আমদানি করার চেষ্টা করব এটি দেখার জন্য যে এটি কোনও তাত্পর্যপূর্ণ করে if
Wookai

মনে রাখবেন যে আপনার টেবিলটি ব্যবহার করা উচিত inde এটি নির্ধারণের পরিবর্তে টেবিলটি মুছে ফেলুন (indeেন্ডেজ, অবস্থান) যাতে সূচিগুলি হ্রাস পাবে এবং ফলস্বরূপ উপাদানগুলি পুনরায় স্থাপন করা হবে।

@ হাকানবোজটেপ এটি টেবিলের হ্যাশম্যাপ অংশের (স্ট্রিং কীগুলি) জন্য প্রাসঙ্গিক নয়।
অ্যাম্বার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.