آرایه ها و جداول درهم سازی

در فصل قبل، با انواع داده های روبی آشنا شدیم. در این فصل، با دو ساختمان داده مهم و کلیدی در روبی و همچنین خواص آن ها آشنا خواهیم شد.

آرایه ها

یک آرایه، مجموعه ای از انواع داده های مختلف است که به ترتیب در مکان مشخصی از حافظه قرار گرفته اند. در روبی، امکان این وجود دارد که اعضای یک آرایه از انواع مختلف باشند. مثلا یک آرایه میتواند شامل اعداد صحیح، رشته ها و حتی آرایه های دیگر باشد. برای تعریف یک آرایه در روبی به این شکل عمل میکنیم :

array = [1, 2, 3, 4]

هر کدام از این خانه ها، یک اندیس مخصوص به خود دارند که از صفر شروع می شود. مثلا :

array[0]

مقدار ۱ را برمیگرداند، چرا که مقدار ۱ را در خانه صفرم آرایه قرار داده ایم. از آنجایی که آرایه ها در روبی، داینامیک هستند، و ممکن است بعد از عملیاتی سایز آرایه را ندانیم، میتوانیم با استفاده از اندیس منفی، آرایه را برعکس بخوانیم :

array[-1]

که در اینجا مقدار ۴ را بر خواهد گرداند.

مرتب سازی آرایه

معمولا، برای راحت شدن عملیاتی همچون جست و جو در یک آرایه، مقادیر آرایه را به صورت صعودی یا نزولی، مرتب می شوند. در روبی، متد خاصی برای این کار در نظر گرفته شده است :

array = [2 , 3, 1, 4]
array = array.sort

با استفاده از متد sort ، این آرایه به شکل صعودی مرتب می شود.

معکوس کردن یک آرایه

با استفاده از متد reverse میتوان آرایه را از آخر به اول چید، و با ترکیب آن با متد sort میتوان به صورت نزولی مرتب نمود. این متد در رشته ها نیز وجود دارد (رشته نیز خود به نوعی یک آرایه است) :

array.reverse

بدست آوردن طول یک آرایه

طول آرایه ها نیز برای ما حائز اهمیت است. بخصوص اگر قرار باشد در آرایه، جست و جو و ... انجام دهیم. برای بدست آوردن طول یک آرایه کافیست به این شکل عمل کنیم :

array.length

این متد نیز با رشته ها مشترک است.

جست و جو در آرایه

برای جست و جو در آرایه نیز کافیست از متد مربوطه در روبی استفاده شود. مثلا میخواهیم ببینیم مقدار ۵ در آرایه ما وجود دارد یا نه :

array.include?5

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

درج عضو جدید در آرایه

برای درج عضو جدید، کافیست آخرین اندیس ممکن را به دست آورده، که مثلا در آرایه نمونه ما ۳ بزرگترین اندیس است. سپس، مقدار جدید را وارد کنید :

array[4] = 5

حذف عضو از آرایه

برای حذف عضوی از یک آرایه، کافیست به این شکل عمل کنیم :

array.delete_at(4)

به این شکل مقداری که در اندیس ۴ ذخیره شده است ، حذف می شود. اگرچه، مستقیما هم میتوان توسط مقدار عملیات حذف را انجام داد.

array.delete(4)

و مقدار ۴، در اینجا در اندیس ۳ ذخیره شده و بعد از انجام متد delete حذف میگردد.

جداول درهم سازی

یک جدول درهم سازی، نوعی ساختمان داده است که هر عضو آن، یک کلید مخصوص دارد. یکی از کاربردهای جدوال درهم سازی در رمز نگاری است. اگرچه در برنامه ها، بیشتر بعنوان نوعی دیکشنری از آن استفاده خواهیم کرد. یک جدول درهم سازی ساده، به این شکل تعریف می شود :

hash_table = {:key => "value"}

برای مثال، میتوان اعداد را به این شکل وارد یک جدول درهم سازی نمود :

hash_table = {1 => "One", 2 => "Two", 3 => "Three", 4 => "Four"}

به این شکل، با فراخوانی کلیدی که تعیین شده، میتوان مقدار را فراخوانی کرد. مثلا :

hash_table[2]

مقدار Two را برمیگرداند.

درج عضو

برای درج یک عضو در جدول درهم سازی، کافیست کلید جدیدی در نظر بگیریم و مقداری را به آن نسبت دهیم. به این شکل :

hash_table[5] = "Five"

سپس، عضو مورد نظر ما در جدول درهم سازی، درج خواهد شد.

حذف عضو

برای حذف کردن اعضای جداول درهم سازی، کافیست تا کلید آن را پاک کنیم. سپس، مقدار آن نیز از جدول درهم سازی ما، پاک خواهد شد :

hash_table.delete(5)

جست و جو

برای جست و جو کردن در یک جدول درهم سازی، دو روش داریم. اولین روش، جست و جو با کلید (و معمولا روش مرسوم ) است و روش دوم جست و جو با مقدار.

جست و جو با مقدار

برای جست و جو کردن در یک جدول درهم سازی با مقدار، کافیست این چنین عمل کنیم :

hash_table.has_value?2

در این روش مطمئن می شویم مقداری که به دنبالش هستیم، حتما در جدول درهم سازی ما وارد شده است.

جست و جو با کلید

برای جست و جو کردن توسط کلید ، کافیست به این شکل عمل کنیم :

hash_table.has_key?3

و سپس در صورت درست بودن نتیجه میتوانیم کلیدی که وارد کردیم را در خود جدول درهم سازی، فراخوانی کنیم.

جمع بندی

در این فصل، با دو ساختمان داده بسیار مهم در روبی آشنا شدیم. در فصول بعدی، برنامه هایی خواهیم نوشت که از این دو ساختمان داده در آنها استفاده شده است. همچنین، فراخواهیم گرفت که چطور از این ساختمان های داده ای و خواصشان، در برنامه های خود استفاده نماییم.

results matching ""

    No results matching ""