সংজ্ঞা: একটি হ্যাশসেট কী?


420

হ্যাশসেট সি # হ্যাশসেট ডেটা স্ট্রাকচারটি। নেট ফ্রেমওয়ার্ক 3.5 এ চালু করা হয়েছিল। বাস্তবায়িত সদস্যদের একটি সম্পূর্ণ তালিকা হ্যাশসেট এমএসডিএন পৃষ্ঠায় পাওয়া যাবে ।

  1. এটি কোথায় ব্যবহৃত হয়?
  2. আপনি এটি ব্যবহার করতে চান কেন?



এটি অভ্যন্তরীণভাবে একটি হ্যাশটেবল ব্যবহার করে। আপনার যদি একটি ভাল হ্যাশটেবল বাস্তবায়ন থাকে (উদাহরণস্বরূপ অভিধান <টি>) আপনি সহজেই হ্যাশসেটটি প্রয়োগ করতে পারেন।
রাজ্জ মেগ্রেলিডজে

উত্তর:


614
    1. HashSetঅবজেক্টের একটি সেট ধারণ করে, তবে এমন কোনও উপায়ে এটি আপনাকে সহজে এবং দ্রুত নির্ধারণ করতে দেয় যে কোনও বস্তু ইতিমধ্যে সেটে রয়েছে কি না। এটি অভ্যন্তরীণভাবে একটি অ্যারে পরিচালনা করে এবং অবজেক্টটিকে একটি সূচক ব্যবহার করে সংরক্ষণ করে যা বস্তুর হ্যাশকোড থেকে গণনা করা হয়। এখানে একবার দেখুন

    2. HashSetএকটি অনিয়ন্ত্রিত সংগ্রহ যা অনন্য উপাদান রয়েছে। এটিতে স্ট্যান্ডার্ড কালেকশন অপারেশনগুলি অ্যাড, রিমুভ, কনটেইনস রয়েছে তবে এটি যেহেতু হ্যাশ-ভিত্তিক প্রয়োগ ব্যবহার করে, তাই এই ক্রিয়াকলাপগুলি হ'ল (1)। (উদাহরণস্বরূপ তালিকার বিপরীতে, যা অন্তর্ভুক্ত এবং অপসারণের জন্য ও (এন) রয়েছে) HashSetএছাড়াও ইউনিয়ন , ছেদকেন্দ্র এবং প্রতিসাম্যগত পার্থক্য হিসাবে স্ট্যান্ডার্ড সেট ক্রিয়াকলাপ সরবরাহ করে । এখানে একবার দেখুন

  1. সেটের বিভিন্ন বাস্তবায়ন রয়েছে। কেউ কেউ হ্যাশিং উপাদানগুলির মাধ্যমে সন্নিবেশ এবং অনুসন্ধানের কাজগুলিকে সুপার দ্রুত করে। তবে এর অর্থ হ'ল উপাদানগুলিতে যে ক্রমটি যুক্ত হয়েছিল তা হারিয়ে গেছে। অন্যান্য বাস্তবায়নগুলি ধীর চলমান সময়ের জন্য অতিরিক্ত অর্ডার সংরক্ষণ করে।

HashSetC # বর্গ প্রথম পদ্ধতির জন্য যায়, এইভাবে না উপাদানের ক্রম সংরক্ষণের। এটি একটি নিয়মিত তুলনায় অনেক দ্রুত List। কিছু প্রাথমিক মানদণ্ড দেখিয়েছিল যে প্রাথমিক ধরণের (ইনট, ডাবল, বুল ইত্যাদি) নিয়ে কাজ করার সময় হ্যাশসেট শালীনভাবে দ্রুত হয়। শ্রেণি অবজেক্টের সাথে কাজ করার সময় এটি অনেক দ্রুত। সুতরাং যে বিন্দু হ্যাশসেট দ্রুত হয়।

একমাত্র ধরা HashSetহ'ল সূচকগুলির মাধ্যমে কোনও অ্যাক্সেস নেই। এক্সেস উপাদান আপনি হয় একটি গণনাকারী ব্যবহার করুন অথবা বিল্ট-ইন ফাংশন ব্যবহার রূপান্তর করতে পারেন HashSetএকটি মধ্যে Listযে মধ্য দিয়ে বারবার। এখানে একবার দেখুন


13
দুটি জিনিস, হ্যাশসেট এবং অনুরূপ হ'ল নেট নেট, সি # এর নয়। এছাড়াও হ্যাশসেট অর্ডার সংরক্ষণ করে না। একটি হ্যাশ সেট থেকে আইটেমগুলি যুক্ত এবং মুছে ফেলার চেষ্টা করুন, আপনি যদি পরে আবার পুনরাবৃত্তি করেন তবে আপনি জানতে পারবেন ..
নওফাল

13

HashSetএর অভ্যন্তরীণ কাঠামো (হ্যাশ) রয়েছে, যেখানে আইটেমগুলি দ্রুত অনুসন্ধান এবং সনাক্ত করা যায়। খারাপ দিকটি হ'ল একটি HashSet(বা সূচী দ্বারা কোনও আইটেম পাওয়া) এর মাধ্যমে পুনরাবৃত্তি বরং ধীর rather

সুতরাং কেন কেউ জানতে চাইবে যে কোনও সেটে একটি এন্ট্রি ইতিমধ্যে উপস্থিত রয়েছে?

একটি পরিস্থিতি যেখানে একটি HashSetদরকারী সেগুলি হ'ল তালিকা থেকে স্বতন্ত্র মানগুলি পাওয়া যেখানে নকল উপস্থিত থাকতে পারে। একবারে কোনও আইটেম যুক্ত হয়ে গেলে HashSetতা নির্ধারণ করা দ্রুত আইটেমটি বিদ্যমান কিনা ( Containsঅপারেটর)।

অন্য সুবিধার HashSetসেট অপারেশন হল: IntersectWith, IsSubsetOf, IsSupersetOf, Overlaps, SymmetricExceptWith, UnionWith

আপনি যদি অবজেক্ট সীমাবদ্ধ ভাষার সাথে পরিচিত হন তবে আপনি এই সেট অপারেশনগুলি সনাক্ত করতে পারবেন। আপনি এটি দেখতে পাবেন যে এটি কার্যকর কার্যকর ইউএমএল বাস্তবায়নের এক ধাপ কাছাকাছি।


20
Re: ডাউনসাইড। না, হ্যাশসেটের মাধ্যমে পুনরাবৃত্তি করা পুরোপুরি দ্রুত। দ্বিতীয়ত, সূচি অনুসারে কোনও আইটেম পাওয়া সম্ভব নয়। প্রকৃতপক্ষে, উপাদানগুলি বিনা সংরক্ষণে সংরক্ষণ করা হয়।
নাইজেল টাচ

@ নিজেল টাচ আপনি যদি সূচকের বিষয়ে যত্ন না রাখেন (ক্রম যাতে তারা যুক্ত হয়েছিল) te তবে, আপনি যদি সূচকের বিষয়ে উদ্বিগ্ন হন তবে অবশ্যই প্রতিটি হ্যাশ কী দিয়ে সূচকটি অবশ্যই সংরক্ষণ করতে হবে এবং এটি ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে খুঁজে পেতে হবে। এই আচরণটি তালিকার তুলনায় আইটেমগুলিতে যুক্ত হওয়া ক্রম অনুসারে এটির চেয়ে আলাদা।
কে রে

এটি দ্রুত হবে কেন তা বোঝা যায়, কারণ কোনও দুটি হ্যাশ এক নয়। "শর্ট সার্কিট" পদ্ধতির সুবিধা নেওয়ার জন্য ক্যোয়ারিকে সক্ষম করে, কিছু নির্দিষ্ট মানদণ্ডকে দ্রুত বাতিল করে।
শেফ_কোড

8

সহজভাবে বলেছিলেন এবং রান্নাঘরের গোপনীয় বিষয়গুলি প্রকাশ না করেই: সাধারণভাবে সেট, এমন একটি সংগ্রহ যা কোনও সদৃশ উপাদান নেই এবং যার উপাদানগুলি কোনও নির্দিষ্ট ক্রমে নয়। সুতরাং, এ HashSet<T>জেনেরিকের সমান List<T>, তবে অর্ডার হারানোর ব্যয়ে দ্রুত অনুসন্ধানের জন্য (হ্যাশ টেবিলের মাধ্যমে, নাম দ্বারা বোঝানো হয়েছে) উপযুক্ত is


1
তবে কোনও হ্যাশসেট <টি> দুটি পণ্য শ্রেণীর মতো একই ডেটাযুক্ত দুটি অবজেক্টগুলিকে কি একই সামগ্রীতে একই বৈশিষ্ট্যযুক্ত দুটি সঞ্চয় করতে পারে?
জোহান হার্সটাদ

আমার ধারণা আমরা কখনই জানতে পারব না
ডেনি

@ জোহান হার্সটাদ আপনার শ্রেণীর জন্য সমতা কম্পিউটারের ধারনা করে সেই সমস্ত সম্পত্তি সম্পর্কে যত্নবান হন বা আপনি একটি আইক্যুয়ালি কম্পম্পার দিয়ে হ্যাশসেট নির্মাণ করেন যা এই সম্পত্তিগুলির যত্নশীল, আমি কেন তা দেখছি না তা দেখছি না। HashSet ডকুমেন্টেশন এটা পরিষ্কার যে এটা এক বা স্বতন্ত্রতা নির্ধারণ করতে অন্যান্য উপর নির্ভর করে নির্মিত হয়।
বেকন বিটস

2

অ্যাপ্লিকেশন দৃষ্টিকোণ থেকে, যদি কারও কেবল অনুলিপি এড়ানো প্রয়োজন হয় তবে HashSetআপনি যা খুঁজছেন তা হ'ল লুকআপ, সন্নিবেশ করান এবং জটিলতাগুলি সরান হ'ল হ'ল (1) - ধ্রুবক । এর অর্থ কী, এটি কতগুলি উপাদান HashSetরয়েছে তা ঠিক একই পরিমাণে সময় নেবে কিনা তা তত গুরুত্বপূর্ণ নয় যেহেতু আপনি O (1) এ উপাদানগুলি সন্নিবেশ করছেন এটি এটি এই ধরণের জিনিসটিকে নিখুঁত করে তোলে।

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