বস্তুর বিশাল সংগ্রহ দেওয়া, নিম্নলিখিতগুলির মধ্যে পারফরম্যান্সের পার্থক্য কি আছে?
myCollection.Contains(myElement)
myCollection.Any(currentElement => currentElement == myElement)
বস্তুর বিশাল সংগ্রহ দেওয়া, নিম্নলিখিতগুলির মধ্যে পারফরম্যান্সের পার্থক্য কি আছে?
myCollection.Contains(myElement)
myCollection.Any(currentElement => currentElement == myElement)
উত্তর:
Contains()এটি একটি উদাহরণ পদ্ধতি এবং এর কার্য সম্পাদন মূলত সংগ্রহের উপর নির্ভর করে। উদাহরণস্বরূপ, Contains()একটি উপর Listহে (ঢ), যখন হয় Contains()একটি HashSetহে (1) হয়।
Any()এটি একটি এক্সটেনশন পদ্ধতি, এবং প্রতিটি সামগ্রীতে প্রতিনিধি প্রয়োগ করে কেবল সংগ্রহের মধ্য দিয়ে যাবে। সুতরাং এটি ও (এন) এর জটিলতা রয়েছে।
Any()যদিও আপনি কোনও প্রতিনিধি পাস করতে পারেন তাই আরও নমনীয়। Contains()শুধুমাত্র একটি বিষয় গ্রহণ করতে পারেন।
Containsএটির বিরুদ্ধেও একটি এক্সটেনশন পদ্ধতি IEnumerable<T>(যদিও কিছু সংগ্রহের নিজস্ব Containsউদাহরণ পদ্ধতি রয়েছে)। আপনি যেমনটি বলেছেন, Anyতার চেয়ে আরও নমনীয় Containsকারণ আপনি এটিকে একটি কাস্টম প্রিকেটটি পাস করতে পারেন তবে এটি কিছুটা দ্রুত Contains হতে পারে কারণ এটি প্রতিটি উপাদানগুলির জন্য ডেলিগেটের অনুরোধ করার প্রয়োজন হয় না।
All()একইভাবে কাজ করে।
এটি সংগ্রহের উপর নির্ভর করে। যদি আপনার অর্ডারকৃত সংগ্রহ থাকে তবে Containsএকটি স্মার্ট অনুসন্ধান (বাইনারি, হ্যাশ, বি-ট্রি, ইত্যাদি) করতে পারে, যখন `যে কোনও () সহ আপনি প্রাথমিকভাবে এটি গণনা করাতে আটকে থাকেন যতক্ষণ না আপনি এটি খুঁজে পান (লিংক-টু-অবজেক্টস ধরে নিচ্ছেন) ।
এছাড়াও নোট করুন যে আপনার উদাহরণে অপারেটরটি Any()ব্যবহার করছে ==যা রেফারেনশিয়াল সমতার জন্য পরীক্ষা করবে, যখন Containsব্যবহার করবে IEquatable<T>বা Equals()পদ্ধতিটি, যা ওভাররাইড হয়ে যেতে পারে।
আমি মনে করি যে এটি প্রয়োগ myCollectionকরা Contains()হয় কী ধরনের উপর নির্ভর করে । উদাহরণস্বরূপ যদি বাছাই করা বাইনারি ট্রি হয় তবে এটি আরও স্মার্ট অনুসন্ধান করতে পারে। এছাড়াও এটি উপাদানটির হ্যাশটিকে অ্যাকাউন্টে নিতে পারে। Any()অন্যদিকে শর্তটি সন্তুষ্টকারী প্রথম উপাদান না পাওয়া পর্যন্ত সংগ্রহের মাধ্যমে গণনা করা হবে element যদি অবজেক্টটির চৌকস অনুসন্ধানের পদ্ধতি ছিল তবে এর জন্য কোনও অপ্টিমাইজেশন নেই।
() রয়েছে এটি একটি এক্সটেনশন পদ্ধতি যা আপনি সঠিক উপায়ে ব্যবহার করলে দ্রুত কাজ করতে পারে। প্রাক্তন হিসাবে:
var result = context.Projects.Where(x => lstBizIds.Contains(x.businessId)).Select(x => x.projectId).ToList();
এটি কোয়েরি দেবে
SELECT Id
FROM Projects
INNER JOIN (VALUES (1), (2), (3), (4), (5)) AS Data(Item) ON Projects.UserId = Data.Item
অন্যদিকে যে কোনও () সর্বদা ও (এন) এর মাধ্যমে পুনরাবৃত্তি করে।
আশা করি এটি কাজ করবে ....