کاربرد و مفهوم HashTable در سی شارپ

سوال

سلام دوستان اگر ممکنه راجب Hashtable برام توضیح بدید و اینکه این ویژگی توی سی شارپ چی هست و چطوری میشه ازش استفاده کرد!

 

ممنون از انجمن درسمن

حل شده 0
Sahand 5 سال 3 پاسخ ها 938 دیده شده 0

پاسخ ها ( ۳ )

  1. Hashtable یک کالکشن non-generic است ، پس می‌تواند شامل هر نوع داده ای برای key و value باشد. بنابراین مقادیر در هنگام واکشی باید به نوع موردنظر تبدیل شوند (عملیات casting).

  2. سلام

    با استفاده از کلاس Hashtable میتوان مجموعه ای از مقادیر را ذخیره سازی کرد. این کالکشن مقادیر را به صورت key و value ذخیره میکند.

  3. سلام به دوست خوبم

    ببینید دوست عزیز HashTable یک کلاسه (که از کالکشن هاست) که داده ها رو  براساس کلید و داده یا (Key/Value) ذخیره میکند.یعنی مکانیزم آن اینگونه است که هر مقدار یک کلید دارد.

    اما باید توجه داشت که در  اصل داده شما در Value ذخیره نمی شود.بلکه یک مقدار هش شده هست! که براساس یک الگوریتم هش انجام می گیرد.که هش شده مقدار شماست…

    هر کلید اشاره گری به داده خودش هست.

    مثلا اینطوری در نظر بگیرید

    کلید name میتونه فقط اشاره گر به مقدار خودش باشه.

    مثلا شما نمیتوانید کلید name رو به چند مقدار وصل کنید! اگر هم به چند مقدار وصل کنید مقادیر override شده و آخرین مقدار در نظر گرفته میشود.

    مثلا اگر کلید name را اول ali وصل کنید سپس به mehdi ، کامپایلر آخرین مقدار که همان mehdi هست در نظر میگیرد!

    نکته ی مهم این هست که HashTable  یک کالکشن جنریک نیست! و از آبجکت تبعیت میکند.

    و اما چرا؟

    قبلا بررسی کردیم که داده شما در Value ذخیره نمی شود، بلکه مقداری هش شده می باشد که همانطور که گفتیم این عمل بایک الگوریتم هش انجام میگیرد! که این الگوریتم از HashSum هر کلید برای ذخیره و بازیابی مقدار استفاده میکند.

    HashSum چیست؟

    هرکلید ما یکHashSum دارد(چون پذیرفتیم که کلید ها باید یونیک باشند!)پس در نتیجه hashSum هرکلید هم متفاوت است!

    فایده ی این HashSum این است که الگوریتم هش با آن میتواند داده را ذخیره و بازیابی کند.یعنی الگوریتم هش از این مقدار استفاده میکند و داده شما رو fetch میکند.

    به مثال های زیر دقت بفرمایید:

     

    مثال زیر هم استفاده از هش تیبل با یک کلید و override شدن آخرین مقدار(مقدار amin به عنوان مقدار نهایی است)

    نمایش تمام کلیدها به همراه مقادیرشان

     

    مثال زیر هم عملیات حذف و بازیابی از هش تیبل را شرح می دهد:

     

     

    نتیجه گیری:

    هش تیبل جنریک و type safe نیست.

    سرعت بسیار بالایی در ذخیره و بازیابی مقادیر دارد.

    سرعت این عمل طبق داکیومنت مایکروسافت O(1 ) هست.

    برای ذخیره و بازیابی خود از هش استفاده میکند.

    اما یک دیتاتایپ قدیمی است و نسخه ی بهتر آن که پرفرمنس بهتری نیز دارد Dictionary ها هستند که سرعت بهتری نیز دارند و اینکه جنریک هستند!!! و توصیه می شود که بجای hashtable ها از دیکشنری ها استفاده شود چون از زیرساخت هش تیبل نیز بهرمنداست.

     

     

    موفق و شاد باشید.
    آموزش سی شارپ

     

    بهترین پاسخ

ارسال یک پاسخ