( تعداد نمایش : 1611 )

آموزش ColdFusion ،انواع داده ی پیچیده : آرایه ها

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

لیست ها داده های ساده می باشند، چون فقط یک رشته می باشند، در حالی که آرایه ها داده های پیچیده می باشند، چون متشکل از چندین قسمت قابل آدرس دهی می باشند و دارای چنیدن مقدار مختلف می باشند.

ایجاد یک آرایه

برخلاف لیست، که یک رشته ساده می باشد، آرایه ها نوع داده ی پیچیده ای می باشند که توسط تابع ArrayNew() ایجاد می گردند. مانند مثال زیر :

<cfset myArray = ArrayNew(1) >

تکه کد بالا، یک آرایه ی یک بعدی ایجاد می کند و آن را به ArrayNew تخصیص می دهد. یک آرایه می تواند تا ۳ بعد داشته باشد.

ارجاع به عضوی از یک آرایه

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

<cfoutput>#MyArray[2]#</cfoutput>

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

افزودن عنصری به آرایه

برای افزودن عنصری به آرایه از ArrayAppend() به شکل زیر استفاده می کنیم :

<cfset myArray = ArrayNew(1)>

<cfset ArrayAppend(myArray,”apple”)>

به تفاوت ArrayAppend و ListAppend توجه کنید :

<cfset myList = ListAppend(myList, “apple”)>

<cfset ArrayAppend(myArray,”apple”)>

ListAppend مقدار لیست اصلی را تغییر نمی دهد، بلکه یک لیست جدید با یک مقدار جدید افزوده شده به انتهای آن ایجاد می کند. اما ArrayAppend تغییرات را روی آرایه ی اصلی اعمال می کند، و مقدار بازگشتی آن در صورت موفقیت تابع true می باشد و در غیر این صورت false می باشد. بنابراین شما حتی نیاز ندارید که مقدار بازگشتی را ذخیره کنید.

همچنین برای افزودن عنصری به ابتدای یک آرایه از تابع ArrayPrepend مانند مثال زیر استفاده می کنیم :

<cfset ArrayPrepend(myArray,”lemon”)>

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

۱ : peach

2 : apple

شما می توانید عنصری را میان عناصر اول و دوم اضافه کنید . بدین منظور از تابع ArrayInsertAt به صورت زیر استفاده می کنیم :

<cfset ArrayInsertAt(myArray,2,”lemon”)>

پس از اجرای کد بالا آرایه ی ما دارای عناصر زیر خواهد بود :

۱ : peach

2 : lemon

3 : apple

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

<cfset myArray[4]=”blueberry”>

حال، آرایه ی ما دارای چهار عنصر زیر می باشد :

۱ : peach

2 : lemon

3 : apple

4 : blueberry

شما همچنین می توانید از مقدار دهی به برخی از عناصر صرف نظر کنید :

<cfset myArray[6]=”pomegranate”>

پس از اجرای کد بالا آرایه ما به صورت زیر می باشد :

۱ : peach

2 : lemon

3 : apple

4 : blueberry

5 : هیچ عنصری با اندیس پنج وجود ندارد

۶ : pomegranate

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

حذف عنصری از یک آرایه

برای حذف عنصری از آرایه می توانید از تابع ArrayDeleteAt به صورت زیر استفاده کنید :

<cfset ArrayDeleteAt(myArray,2)>

تابع بالا عنصر دوم از آرایه را حذف می کند.

برای پاک کردن کل آرایه ، یعنی حذف تمام عناصر از تابع ArrayClear مانند زیر استفاده می کنیم :

<cfset ArrayClear(myArray)>

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

برای تست کردن اینکه آیا هیچ عنصری در آرایه موجود می باشد یا نه ، از تابع ArrayIsEmpty به صورت زیر استفاده می کنیم :

<cfif ArrayIsEmpty(myArray)>

This Array is empty.

<cfelse>

This Array has some elements.

</cfif>

برای بدست آوردن تعداد عناصر یک آرایه از تابع ArrayLen بصورت زیر استفاده می کنیم :

<cfset numElements = ArrayLen(myArray) >

ArrayLen عناصر تعریف نشده را نیز حساب می کند.

پیدا کردن عنصری در آرایه :

برای پیدا کردن عناصر در یک لیست دو تابع ListFind و ListFindnocase وجود داشتند، ولی هیچ تابعی برای جستجو بر روی آرایه ها وجود ندارد. بنابراین، برای جستجو در یک آرایه، باید از cfloop مانند مثال زیر استفاده کرد :

<cfloop from=”۱” to=”#ArrayLen(myArray)#” index=”I”>

<cfif myArray[I] EQ “apple”>

<cfbreak>

</cfif>

</cfloop>

پس از اجرای کد بالا، I دارای اندیس عنصر دارای مقدار apple می باشد.

برخی توابع ریاضی برای آرایه ها :

تابع ArrayMin برای پیدا کردن کمترین مقدار موجود در آرایه به کار می رود.

تابع ArrayMax برای پیدا کردن بیشترین مقدار موجود در آرایه به کار می رود.

تابع ArraySum برای پیدا کردن مجموع مقادیر موجود در آرایه به کار می رود.

تابع ArrayAvg برای پیدا کردن میانگین مقادیر موجود در آرایه به کار می رود.

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

<cfset NumericArray=ArrayNew(1)>

<cfset NumericArray[1]=10>

<cfset NumericArray[2]=12>

<cfset NumericArray[3]=11>

<cfset NumericArray[4]=20>

<cfset NumericArray[5]=10>

<cfset Minimum=ArrayMin(NumericArray)>

<cfset Maximum=ArrayMax(NumericArray)>

<cfset Sum=ArraySum(NumericArray)>

<cfset Avg=ArraySum(NumericArray)>

تعویض جای عناصر یک آرایه :

فرض کنید عناصر آرایه ی ما به صورت زیر باشند :

۱ : peach

2 : lemon

3 : apple

4 : blueberry

برای تعویض جای عنصر اول و عنصر سوم ، از تابع ArraySwap به صورت زیر استفاده می کنیم :

<cfset ArraySwap(myArray,1,3)>

حال عناصر آرایه ی ما به صورت زیر می باشند :

۱ : apple

2 : lemon

3 : peach

4 : blueberry

مرتب سازی عناصر یک آرایه :

همانند لیست ها، شما می توانید عناصر یک آرایه را به راحتی مرتب کنید :

<cfset ArraySort(myArray,”text”,”asc”>

پس از اینکه کد بالا اجرا شد، آرایه دارای عناصر به ترتیب زیر می باشد :

۱ : apple

2 : blueberry

3 : lemon

4 : peach

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

همانند برای ListSort()، دومین پارامتر تابع ArraySort، نوع مرتب سازی که می خواهید انجام دهید را مشخص می کند :

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

· Text : آرایه را به صورت الفبایی مرتب سازی می کند، و حساس به بزرگی و کوچکی حروف می باشد.

· Textnocase : آرایه را به صورت الفبایی مرتب سازی می کند، و حساس به بزرگی و کوچکی حروف نمی باشد.

سومین پارامتر تابع ArraySort() می تواند “asc” و یا “desc” باشد. بستگی دارد به اینکه شما می خواهید آرایه را به صورت از کوچک به بزرگ مرتب کنید و یا از بزرگ به کوچک مرتب کنید.

تغییر اندازه ی یک آرایه :

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

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

<cfset ArrayResize(myArray, 500)>

برای بدست آوردن حداکثر بهینه سازی، از تابع ArrayResize بلافاصله بعد از استفاده از ArrayNew استفاده کنید.

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

برای تبدیل یک آرایه ی موجود به یک لیست جدید، از تابع ArrayToList به صورت زیر استفاده می کنیم :

<cfset NewList = ArrayToList(myArray)>

برای تبدیل یک لیست موجود به یک آرایه ی جدید، از تابع ListToArray به صورت زیر استفاده می کنیم :

<cfset NewArray = ListToArray(myList)>

دیدگاه خود را بیان کنید.

باید وارد سایت شده باشید برای دیدگاه دادن