Set
সি # তে জাভা সংগ্রহের সমতুল্য কোনও কি আছে তা কি কেউ জানেন ? আমি জানি তুমি কিছুটা অনুকরণমূলক একটি সেট একটি ব্যবহার করতে পারেন যে Dictionary
বা HashTable
পূর্ণ তবে মানগুলির উপেক্ষা দ্বারা, কিন্তু যে একটি খুব মার্জিত উপায় নেই।
Set
সি # তে জাভা সংগ্রহের সমতুল্য কোনও কি আছে তা কি কেউ জানেন ? আমি জানি তুমি কিছুটা অনুকরণমূলক একটি সেট একটি ব্যবহার করতে পারেন যে Dictionary
বা HashTable
পূর্ণ তবে মানগুলির উপেক্ষা দ্বারা, কিন্তু যে একটি খুব মার্জিত উপায় নেই।
উত্তর:
হ্যাশসেট চেষ্টা করুন :
হ্যাশসেট (অফ টি) শ্রেণি উচ্চ-পারফরম্যান্স সেট ক্রিয়াকলাপ সরবরাহ করে। একটি সেট একটি সংগ্রহ যা কোনও সদৃশ উপাদান নেই এবং যার উপাদানগুলি কোনও নির্দিষ্ট ক্রমে নেই ...
একটি হ্যাশসেট (অফ টি) অবজেক্টের ক্ষমতা হ'ল বস্তুটি ধারণ করতে পারে এমন উপাদানগুলির সংখ্যা। একটি হ্যাশসেট (অফ টি) অবজেক্টটির ক্ষমতা স্বয়ংক্রিয়ভাবে বৃদ্ধি পায় কারণ বস্তুটিতে উপাদান যুক্ত করা হয়।
হ্যাশসেট (অফ টি) শ্রেণি গাণিতিক সেটগুলির মডেলের উপর ভিত্তি করে তৈরি করা হয়েছে এবং অভিধানের (অফ টি, টিভিয়ালিউ) বা হ্যাশটেবল সংগ্রহের কীগুলি অ্যাক্সেস করার মতো উচ্চ-পারফরম্যান্স সেট ক্রিয়াকলাপ সরবরাহ করে । সহজ কথায়, হ্যাশসেট (অফ টি) শ্রেণিটি মান ছাড়া একটি অভিধান (অফ টিকি, টিভিয়াল) সংগ্রহ হিসাবে ভাবা যেতে পারে ।
একটি হ্যাশসেট (অফ অফ টি) সংগ্রহটি বাছাই করা হয় না এবং এতে নকল উপাদান থাকতে পারে না ...
আপনি .NET 3.5 ব্যবহার করছেন, আপনি ব্যবহার করতে পারেন HashSet<T>
। এটি সত্য যে। নেট সেটের পাশাপাশি জাভা যদিও পূরণ করে না।
Wintellect PowerCollections খুব সাহায্য করতে পারে।
যদি আপনি .NET 4.0 বা তার পরে ব্যবহার করছেন:
যে ক্ষেত্রে আপনার বাছাই করার দরকার পরে ব্যবহার করুন SortedSet<T>
। অন্যথায় যদি আপনি না করেন, তবে HashSet<T>
এটি O(1)
অনুসন্ধান এবং পরিচালনা পরিচালনা করার জন্য এটি ব্যবহার করুন । যেখানে SortedSet<T>
হয় O(log n)
অনুসন্ধানের জন্য এবং অপারেশন নিপূণভাবে।
আমি আইসিআই.ক্লাকশনগুলি http://www.codeproject.com/KB/recips/sets.aspx ব্যবহার করি
এটি প্রচুর ওএসএস প্রকল্পে ব্যবহৃত হয়, আমি প্রথমে এটি এনহাইবারনেটে এসেছি
আমি একটি কাছাকাছি একটি মোড়ক ব্যবহার করি Dictionary<T, object>
, মানগুলিতে নাল সঞ্চয় করি। এটি কীগুলিতে ও (1) যুক্ত, অনুসন্ধান এবং সরিয়ে দেয় এবং সমস্ত উদ্দেশ্য এবং উদ্দেশ্যে একটি সেটের মতো কাজ করে।
কটাক্ষপাত আছে PowerCollections CodePlex এ করে। সেট এবং অর্ডারসেট ব্যতীত এটিতে আরও কয়েকটি দরকারী সংগ্রহের ধরণ রয়েছে যেমন ডেক, মাল্টি ডিকোরিয়াস, ব্যাগ, অর্ডারব্যাগ, অর্ডারড অভিধান এবং অর্ডারড মাল্ট্রি ডিকোশনারি।
আরও সংগ্রহের জন্য, রয়েছে সি 5 জেনেরিক সংগ্রহ গ্রন্থাগার ।
আমি জানি এটি একটি পুরানো থ্রেড, তবে আমি একই সমস্যায় পড়েছিলাম এবং হ্যাশসেটকে খুব অবিশ্বাস্য বলে মনে করলাম কারণ একই বীজ দেওয়ার পরে, গেটহ্যাশকোড () বিভিন্ন কোড ফেরত দিয়েছে। সুতরাং, আমি ভেবেছিলাম, কেন কেবল একটি তালিকা ব্যবহার না করে এই জাতীয় অ্যাড পদ্ধতিটি গোপন করুন
public class UniqueList<T> : List<T>
{
public new void Add(T obj)
{
if(!Contains(obj))
{
base.Add(obj);
}
}
}
যেহেতু তালিকা সম্পূর্ণরূপে সমতা নির্ধারণের জন্য সমান পদ্ধতিটি ব্যবহার করে, আপনি পছন্দসই ফলাফল পেয়েছেন তা নিশ্চিত করতে আপনি আপনার টি টাইপের সমান পদ্ধতিটি সংজ্ঞায়িত করতে পারেন।
List.Contains
হ'ল O(n)
জটিলতা যার অর্থ আপনার Add
পদ্ধতিটিও এখন O(n)
জটিল হয়ে ওঠে । Add
উভয় ক্ষেত্রেই অভ্যন্তরীণ সংগ্রহটি পুনরায় আকার দেওয়ার দরকার নেই List
এবং HashMap
এটি O(1)
জটিলতা হওয়া উচিত । টিএলডিআর: এটি কাজ করবে তবে এটি হ্যাকি এবং কম দক্ষ।