المصفوفات

المصفوفات تعتبر الحل السحري إذا كنت تريد ادخال او طباعة بيانات كثيرة ، فرئيس القسم يستطيع حصر بيانات من هم في قسمه داخل البرنامج عن طريق المصفوفة ، كذلك المعلم يستطع طباعة بيانات اعداد كبيرة من طلبته فقط بضغطة الزر ، والمصفوفة معروف أنها مجموعة بيانات من نفس النوع . سوف نتعرف على طريقة تعريفها وتعبئتها وطباعتها :-

أولا : تعريف المصفوفة :-

var myArray=Array<Int>(5){0}

في البداية نعرف المتغير ومن ثم بعد علامة = نحدد أن نوع المتغير مصفوفة ومن ثم نحدد نوعها <Int> أنها من نوع عدد صحيح (5)تشير إلى طول المصفوفة أي أنها  تحوي بداخلها ٥ عناصر ، وفي النهاية {0} نحدد أن المؤشر أو index يبدأ من الصفر .


ثانيا: إدخال قيم للمصفوفة :-

حسناً الأن عرفنا هذه المصفوفة أريد إدخال قيم بداخلها أي تعبئتها ، نستطيع تعبئتها بهذه الطريقة

myArray[0]=12

ولكن هذه الطريقة ستكون مرهقة لو كانت المصفوفة لدي طويلة أي تحمل عناصر كثيرة ، والحل السحري كالعادة هو استخدام الدوارة أو loop ، فقمنا باستخدام for loop :-

طبعاً هذا المثال الذي سوف نطرحه هو لو أننا أردنا طباعة الأرقام من ٠-٤ بالترتيب من البرنامج :-

for(i in 0..5)
{
    myArray[i]=i
    println(myArray[i])
}

أولاً : for(i in 0..5) الحلقة التي لدي عدد عناصرها ستة ، من ٠ إلى ٥ .

ثانياً : myArray[i]=i i تعبر عن إذا كانت الحلقة تبدأ من ٠ فأجعل أيضا قيمة العنصر = ٠ ، وهكذا :

myArray[0]=0

myArray[1]=1

ثالثاً : وهي الخطوة الأخيرة بعد التعبئة وهي طباعة العناصر .

ناتج التنفيذ :-

0

1

2

3

4

حسناً ولكن لو أردنا من المستخدم تعبئة هذه المصفوفة ؟ الحل بسيط جداً :-

    println("Enter Number for ARRAY")

    for (i in 0..4) {
        myArray[i] = readLine()!!.toInt()
    }

myArray[i] = readLine()!!.toInt()

هذا يعني أنه بكل عنصر من ٠ – ٤ قم بطلب المستخدم أن يدخل رقم ولماذا من ٠-٤ وذلك لأن مصفوفتنا عدد عناصرها ٥ 


ثالثا: طباعة عناصر المصفوفة :-

حسنا هكذا تم أمر الإدخال ، تبقى لنا أمر وهو لو أردنا طباعة هذه العناصر التي أدخلها ؟ نستطيع الطباعة إما بالـ for or while :-

//printed by for
println("printed by for")
    for(i in myArray){
         println(i)
     }

 

//printed by while
println("printed by while")
var i=0
while (i<myArray.size){
    println(myArray[i])
    i++
}

ناتج التنفيذ :-

Enter Number for ARRAY

5

4

3

2

1

printed by for

5

4

3

2

1

printed by while

5

4

3

2

1

– لو اردنا طباعة index للمصفوفه باستخدام for تكون الشفرة بهذا الشكل

for ((index, value) in myArray.withIndex()) {
    println("the element at $index is $value")
}

مصفوفة نصية :-

var student=Array<String>(6){""}
println("Enter name your student :")
 for(i in 0..5){
     student[i]=readLine()!!
 }

for(i in 0..4){
     println(student[i])
 }

هنا عرفنا متغير من نوع سلسلة نصية لأسماء الطلاب مع مراعاة {“”} القيمة الافتراضية هنا لا نستطيع كتابتها ٠ أو أي ارقم وذلك لأن المصفوفة نصية فنقوم بوضع علامتي التنصيص وندعها فارغة ، كما ترون هو نفس الأمر احتجنا إلى دوارتان الأولى لإدخال الأسماء من المستخدم والأخرى لطباعة بيانات هذه المصفوفة.


رابعا : التعامل مع المصفوفات :

بالطبع اذا كان لدي مصفوفة وهي تجمع كبير للبيانات فسنحتاج إلى دوال سريعة وجاهزة للتعامل مع هذه المصفوفة ، في الجدول ادناه اشهر الدوال المستخدمة للمصفوفة :

الاثنان لهم نفس الاستخدام وهو معرفة عدد عناصر المصفوفة فنقوم بكتابة :

println(myArray.size)

count – size

لجلب عنصر في المصفوفة نقوم باستخدام get ونمرر لها index العنصر :

println(myArray.get(index))

get

استبدال قيمة عنصر في المصفوفة بقيمة جديدة سنقوم باستخدام set ونمرر لها index العنصر و القيمة الجديدة ، هكذا :

println(myArray.set(index,new value))

set

وهي للتحقق من قيمة العنصر أي ان ناتج التنفيذ العائد سيكون منطقي اما true or false :

println(myArray.equals(value))

equals

لترتيب عناصر المصفوفة :

println(myArray.sort())

sort

لإيجاد اكبر عنصر في المصفوفة :

println(myArray.max())

max

لإيجاد اصغر عنصر في المصفوفة :

println(myArray.min())

min

لجلب اخر عنصر في المصفوفة :

println(myArray.last())

last

لجلب اول عنصر في المصفوفة :

println(myArray.first())

first

فلترة العناصر او البحث داخل المصفوفة :

val search = myArray.filter { x -> x <= 3 }

هنا سيقوم بطباعة العناصر داخل المصفوفة ذات القيم 3 او اقل

filter

لعرض الترميز الخاص بالمصفوفة :

println(myArray.hashCode())

hashcode

تقوم بعكس عناصر المصفوفة :

println(myArray.reversed())

reserved