Javaطرق مصفوفة النصوص: إنشاء باستخدام مثال

⚡ ملخص ذكي

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

  • 📦 المبدأ الأساسي: المصفوفة هي كائن يحتوي على العديد من القيم تحت اسم واحد ويعرض كل قيمة من خلال فهرس يبدأ من الصفر.
  • 🛠️ صيغة الإنشاء: يفضل استخدام الترميز الحرفي مع الأقواس المربعة، بينما يظل مُنشئ المصفوفة متاحًا للتعليمات البرمجية القديمة.
  • طرق التحوير: تقوم الدوال push و pop و shift و unshift و splice بتغيير المصفوفة الأصلية وإرجاع إما القيمة المحذوفة أو الطول الجديد.
  • 🔍 الطرق غير المتحولة: تقوم الدوال slice و concat و join و indexOf و includes بقراءة المصفوفة دون تغيير العناصر المخزنة.
  • 🔁 عائلة التكرار: تقوم الدوال forEach و map و filter و reduce و find بتطبيق دالة رد نداء على كل عنصر ودعم أنماط البرمجة الوظيفية.
  • ⚠️ تنبيه بشأن الفرز: يقوم الفرز الافتراضي بمقارنة القيم كسلاسل نصية، لذا تتطلب البيانات الرقمية دالة مقارنة صريحة.
  • 🧱 الهياكل المتداخلة: يؤدي وضع المصفوفات داخل المصفوفات إلى إنشاء شبكة متعددة الأبعاد يتم الوصول إليها باستخدام تعبيرين للفهرسة.

Javaطرق مصفوفة النصوص

ما هو المصفوفة في Javaالبرنامج النصي؟

المصفوفة هي كائن يمكنه تخزين ملف مجموعة من العناصرتُصبح المصفوفات مفيدة للغاية عند الحاجة إلى تخزين كميات كبيرة من البيانات من النوع نفسه. لنفترض أنك تريد تخزين بيانات 500 موظف. إذا كنت تستخدم متغيرات، فسيتعين عليك إنشاء 500 متغير، بينما يمكنك فعل الشيء نفسه باستخدام مصفوفة واحدة. يمكنك الوصول إلى عناصر المصفوفة بالرجوع إلى عناصرها. رقم الفهرسويكون فهرس العنصر الأول في المصفوفة صفرًا.

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

كيفية إنشاء مصفوفة في Javaسيناريو

يمكنك إنشاء مصفوفة في Javaسيناريو على النحو المبين أدناه.

var students = ["John", "Ann", "Kevin"];

هنا، تقوم بتهيئة المصفوفة الخاصة بك عند إنشائها بالقيم "John" و"Ann" و"Kevin". مؤشر "جون" و"آن" و"كيفن" هو 0 و1 و2 على التوالي. إذا كنت تريد إضافة المزيد من العناصر إلى مصفوفة الطلاب، فيمكنك القيام بذلك على النحو التالي:

students[3] = "Emma";
students[4] = "Rose";

يمكنك أيضًا إنشاء مصفوفة باستخدام مُنشئ المصفوفة على النحو التالي:

var students = new Array("John", "Ann", "Kevin");

OR

var students = new Array();

students[0] = "John";

students[1] = "Ann";

students[2] = "Kevin";

كيفية الوصول إلى عناصر المصفوفة وتعديلها

يوجد كل عنصر في موضع مرقم. تُستخدم صيغة الأقواس المربعة لقراءة قيمة، أو تعيين قيمة جديدة، أو إضافة إدخال جديد عندما يساوي الفهرس الطول الحالي.

let students = ["John", "Ann", "Kevin"];

console.log(students[0]);              // John  - first element
console.log(students[students.length - 1]); // Kevin - last element

students[1] = "Anna";                // replace an existing value
students[3] = "Emma";                // append a new value

console.log(students);              // ["John", "Anna", "Kevin", "Emma"]
console.log(students.length);       // 4
console.log(students[9]);              // undefined - index does not exist

⚠️ تحذير: يؤدي تعيين قيمة لفهرس يتجاوز الطول الحالي بكثير إلى إنشاء مصفوفة متفرقة مليئة بالخانات الفارغة. استخدم push() بدلاً من استخدام فهرس متجاوز، بحيث تظل المصفوفة كثيفة ويمكن التنبؤ بها.

Javaطرق مصفوفة النصوص

يحتوي كائن Array على العديد من الخصائص والأساليب التي تساعد المطورين على التعامل مع المصفوفات بسهولة وكفاءة. يمكنك الحصول على قيمة الخاصية عن طريق تحديد arrayname.property ومخرجات الطريقة عن طريق تحديد arrayname.method().

  1. خاصية الطول -> إذا كنت تريد معرفة عدد العناصر في المصفوفة، يمكنك استخدام خاصية الطول.
  2. خاصية النموذج الأولي -> إذا كنت تريد إضافة خصائص وأساليب جديدة، يمكنك استخدام خاصية النموذج الأولي.
  3. طريقة عكسية -> يمكنك عكس ترتيب العناصر في المصفوفة باستخدام الطريقة العكسية.
  4. طريقة الفرز يمكنك فرز العناصر في مصفوفة باستخدام طريقة الفرز.
  5. طريقة البوب -> يمكنك إزالة العنصر الأخير من المصفوفة باستخدام طريقة pop.
  6. طريقة التحول –> يمكنك إزالة العنصر الأول من المصفوفة باستخدام طريقة الإزاحة.
  7. طريقة الدفع -> يمكنك إضافة قيمة كعنصر أخير في المصفوفة.

يصنف الجدول المرجعي أدناه الطرق الأكثر استخدامًا حتى تتمكن من رؤية أي منها يغير المصفوفة الأصلية وأي منها يعيد قيمة جديدة بنظرة سريعة.

الأسلوب الهدف سياسات الإرجاع والاستبدال تغييرات المصفوفة الأصلية
إدفع() أضف عنصرًا واحدًا أو أكثر إلى النهاية طول جديد نعم
pop () قم بإزالة العنصر الأخير العنصر المحذوف نعم
unshift () أضف عنصرًا واحدًا أو أكثر إلى المقدمة طول جديد نعم
تحول() قم بإزالة العنصر الأول العنصر المحذوف نعم
لصق او جمع() أضف أو احذف عناصر في أي موضع مصفوفة العناصر المحذوفة نعم
فرز() اطلب المنتجات المصفوفة المرتبة نعم
عكس () اعكس ترتيب العناصر المصفوفة المعكوسة نعم
شريحة() انسخ جزءًا من المصفوفة مصفوفة جديدة لا
concat () ضم مصفوفتين أو أكثر مصفوفة جديدة لا
انضم() قم بدمج العناصر في سلسلة نصية خيط لا
دليل ل() حدد موضع قيمة ما المؤشر أو -1 لا
يتضمن() اختبر ما إذا كانت القيمة موجودة صحيحة أو خاطئة لا

إضافة وإزالة العناصر

let fruits = ["apple", "banana"];

fruits.push("cherry");      // ["apple", "banana", "cherry"]
fruits.unshift("mango");    // ["mango", "apple", "banana", "cherry"]
fruits.pop();                // ["mango", "apple", "banana"]
fruits.shift();              // ["apple", "banana"]

// splice(startIndex, deleteCount, ...itemsToInsert)
fruits.splice(1, 0, "kiwi"); // ["apple", "kiwi", "banana"]
console.log(fruits);

البحث والنسخ والربط

let colors = ["red", "green", "blue", "green"];

console.log(colors.indexOf("green"));     // 1  - first match only
console.log(colors.lastIndexOf("green")); // 3
console.log(colors.includes("pink"));     // false
console.log(colors.slice(1, 3));         // ["green", "blue"]
console.log(colors.join(" | "));         // red | green | blue | green
console.log(colors.concat(["black"]));   // new array, colors unchanged

أساليب التكرار: forEach، map، filter، و reduce

بلمسة عصرية Javaيفضل البرنامج النصي الطرق التي تعتمد على ردود الاتصال على حلقات الفهرسة اليدوية، لأن الغرض من العملية مذكور مباشرة في اسم الطريقة.

const scores = [45, 72, 88, 31, 95];

scores.forEach(s => console.log(s));   // prints each score

const doubled = scores.map(s => s * 2);  // [90, 144, 176, 62, 190]
const passed  = scores.filter(s => s >= 50); // [72, 88, 95]
const total   = scores.reduce((sum, s) => sum + s, 0); // 331
const first   = scores.find(s => s > 80);   // 88

console.log(doubled, passed, total, first);

💡 نصيحة: الافتراضي sort() يحوّل العناصر إلى سلاسل نصية، لذا [10, 9, 100].sort() عائدات [10, 100, 9]مرر دالة مقارنة مثل sort((a, b) => a - b) لترتيب الأرقام بشكل صحيح.

Javaمثال على مصفوفة البرامج النصية مع المصدر Code

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

<html>
<head>
	<title>Arrays!!!</title>
	<script type="text/javascript">
		var students = new Array("John", "Ann", "Aaron", "Edwin", "Elizabeth");
		Array.prototype.displayItems=function(){
			for (i=0;i<this.length;i++){
				document.write(this[i] + "<br />");
			}
		}
		document.write("students array<br />");
		students.displayItems();
		document.write("<br />The number of items in students array is " + students.length + "<br />");
		document.write("<br />The SORTED students array<br />");
		students.sort();
		students.displayItems();
		document.write("<br />The REVERSED students array<br />");
		students.reverse();
		students.displayItems();
		document.write("<br />THE students array after REMOVING the LAST item<br />");
		students.pop();
		students.displayItems();
        document.write("<br />THE students array after PUSH<br />");
        students.push("New Stuff");
		students.displayItems();
	</script>
</head>
<body>
</body>
</html>

الناتج المتوقع:

students array
John
Ann
Aaron
Edwin
Elizabeth

The number of items in students array is 5

The SORTED students array
Aaron
Ann
Edwin
Elizabeth
John

The REVERSED students array
John
Elizabeth
Edwin
Ann
Aaron

THE students array after REMOVING the LAST item
John
Elizabeth
Edwin
Ann

THE students array after PUSH
John
Elizabeth
Edwin
Ann
New Stuff

لاحظ أن عملية الفرز تضع "آرون" قبل "آن" لأن الأحرف الكبيرة والصغيرة تُقارن برموزها. لاحظ أيضًا أن عملية الحذف أزالت "آرون" من المصفوفة المعكوسة، مما يؤكد أن كلاً من الفرز والعكس قد غيّرا المصفوفة الأصلية في مكانها.

كيفية تكرار العملية Javaمصفوفة البرامج النصية

أربعة مراحيضping تتوفر أنماط مختلفة، وكل نمط يناسب حالة معينة. تمنح حلقة for الكلاسيكية تحكمًا كاملاً في الفهرس، بينما تقرأ حلقة for…of القيم مباشرةً، وتعبر حلقة forEach عن الغرض بوضوح، أما حلقة for…in فينبغي استخدامها لخصائص الكائنات.

const cities = ["Paris", "Tokyo", "Cairo"];

// 1. Classic for loop - index is available
for (let i = 0; i < cities.length; i++) {
    console.log(i + ": " + cities[i]);
}

// 2. for...of loop - value is available
for (const city of cities) {
    console.log(city);
}

// 3. forEach with index parameter
cities.forEach((city, index) => console.log(index, city));

// 4. entries() when both index and value are needed
for (const [index, city] of cities.entries()) {
    console.log(index, city);
}

يُمكن الاطلاع على شرحٍ مُفصّلٍ لبنية الحلقات، بما في ذلك while و do…while، في المقال المُخصّص لـ كيفية استخدام الحلقات في Javaسيناريو.

المصفوفات متعددة الأبعاد في Javaسيناريو

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

const matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
];

console.log(matrix[1][2]); // 6  - row index 1, column index 2

for (const row of matrix) {
    console.log(row.join(" "));
}

// flatten a nested array into a single level
console.log(matrix.flat()); // [1, 2, 3, 4, 5, 6, 7, 8, 9]

الإخراج:

6
1 2 3
4 5 6
7 8 9
[1, 2, 3, 4, 5, 6, 7, 8, 9]

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

الأسئلة الشائعة

تُخزّن المصفوفة قائمةً مُرتبةً يتم الوصول إليها بواسطة فهارس رقمية، بينما يُخزّن الكائن خصائص مُسمّاة بترتيب غير مضمون. ترث المصفوفات أساليب القوائم مثل push و map التي لا توفرها الكائنات العادية.

استخدم الدالة Array.isArray(value)، التي تُرجع القيمة true فقط للمصفوفات. أما عامل typeof فهو غير موثوق هنا لأنه يُرجع القيمة "object" للمصفوفات والتواريخ والقيمة null على حد سواء.

استخدم صيغة النشر […original] أو original.slice(). التعيين البسيط ينسخ المرجع فقط، لذا فإن التعديلات من خلال أي من المتغيرين ستؤثر على نفس المصفوفة الأساسية.

ابحث عن الموضع باستخدام indexOf ومرره إلى splice، على سبيل المثال arr.splice(arr.indexOf(“Ann”), 1). بدلاً من ذلك، تُرجع دالة filter مصفوفة جديدة تستبعد القيمة غير المرغوب فيها.

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

نعم، وعادةً ما يحدث ذلك. مع ذلك، تأكد مما إذا كانت الطريقة المقترحة تُعدّل المصفوفة الأصلية، لأن أي عملية دمج أو فرز غير متوقعة قد تُفسد حالة مكون React أو Vue.

تلخيص هذه التدوينة بـ: