การเขียนโปรแกรม D - อาร์เรย์

ภาษาโปรแกรม D จัดเตรียมโครงสร้างข้อมูลชื่อ arraysซึ่งจัดเก็บคอลเลกชันตามลำดับขนาดคงที่ขององค์ประกอบประเภทเดียวกัน อาร์เรย์ใช้ในการจัดเก็บชุดข้อมูล มักจะมีประโยชน์มากกว่าที่จะคิดว่าอาร์เรย์เป็นชุดของตัวแปรประเภทเดียวกัน

แทนที่จะประกาศตัวแปรเดี่ยวเช่น number0, number1, ... และ number99 คุณประกาศตัวแปรอาร์เรย์หนึ่งตัวเช่นตัวเลขและใช้ตัวเลข [0], ตัวเลข [1] และ ... , ตัวเลข [99] เพื่อแสดง ตัวแปรแต่ละตัว องค์ประกอบเฉพาะในอาร์เรย์ถูกเข้าถึงโดยดัชนี

อาร์เรย์ทั้งหมดประกอบด้วยตำแหน่งหน่วยความจำที่อยู่ติดกัน ที่อยู่ต่ำสุดสอดคล้องกับองค์ประกอบแรกและที่อยู่สูงสุดขององค์ประกอบสุดท้าย

การประกาศอาร์เรย์

ในการประกาศอาร์เรย์ในภาษาการเขียนโปรแกรม D โปรแกรมเมอร์จะระบุประเภทขององค์ประกอบและจำนวนองค์ประกอบที่อาร์เรย์ต้องการดังนี้ -

type arrayName [ arraySize ];

สิ่งนี้เรียกว่าอาร์เรย์มิติเดียว arraySizeต้องเป็นจำนวนเต็มมากขึ้นอย่างต่อเนื่องกว่าศูนย์และประเภทสามารถใด ๆ ที่ถูกต้องเขียนโปรแกรม D ชนิดข้อมูลภาษา ตัวอย่างเช่นในการประกาศอาร์เรย์ 10 องค์ประกอบที่เรียกว่าbalance of type double ให้ใช้คำสั่งนี้ -

double balance[10];

การเริ่มต้นอาร์เรย์

คุณสามารถเริ่มต้นองค์ประกอบอาร์เรย์ภาษาการเขียนโปรแกรม D ทีละรายการหรือใช้คำสั่งเดียวดังต่อไปนี้

double balance[5] = [1000.0, 2.0, 3.4, 17.0, 50.0];

จำนวนค่าระหว่างวงเล็บเหลี่ยม [] ทางด้านขวาต้องไม่เกินจำนวนองค์ประกอบที่คุณประกาศสำหรับอาร์เรย์ระหว่างวงเล็บเหลี่ยม [] ตัวอย่างต่อไปนี้กำหนดองค์ประกอบเดียวของอาร์เรย์ -

หากคุณละเว้นขนาดของอาร์เรย์อาร์เรย์ที่ใหญ่พอที่จะรองรับการเริ่มต้นจะถูกสร้างขึ้น เพราะฉะนั้นถ้าคุณเขียน

double balance[] = [1000.0, 2.0, 3.4, 17.0, 50.0];

จากนั้นคุณจะสร้างอาร์เรย์เดียวกันกับที่คุณทำในตัวอย่างก่อนหน้านี้

balance[4] = 50.0;

คำสั่งข้างต้นกำหนดองค์ประกอบหมายเลข 5 ในอาร์เรย์เป็นค่า 50.0 อาร์เรย์ที่มีดัชนีที่ 4 จะเป็น 5 เช่นองค์ประกอบสุดท้ายเนื่องจากอาร์เรย์ทั้งหมดมี 0 เป็นดัชนีขององค์ประกอบแรกซึ่งเรียกอีกอย่างว่าดัชนีฐาน การแสดงภาพต่อไปนี้แสดงอาร์เรย์เดียวกันกับที่เรากล่าวถึงข้างต้น -

การเข้าถึงองค์ประกอบอาร์เรย์

องค์ประกอบถูกเข้าถึงโดยการสร้างดัชนีชื่ออาร์เรย์ ทำได้โดยการวางดัชนีขององค์ประกอบไว้ในวงเล็บเหลี่ยมหลังชื่อของอาร์เรย์ ตัวอย่างเช่น -

double salary = balance[9];

ข้อความข้างต้นใช้เวลา 10 ปีบริบูรณ์องค์ประกอบจาก array และกำหนดค่าให้ตัวแปรเงินเดือน ตัวอย่างต่อไปนี้ใช้การประกาศการกำหนดและการเข้าถึงอาร์เรย์ -

import std.stdio;  
void main() { 
   int n[ 10 ]; // n is an array of 10 integers  
   
   // initialize elements of array n to 0 
   for ( int i = 0; i < 10; i++ ) { 
      n[ i ] = i + 100; // set element at location i to i + 100 
   }
   
   writeln("Element \t Value");
   
   // output each array element's value 
   for ( int j = 0; j < 10; j++ ) { 
      writeln(j," \t ",n[j]); 
   } 
}

เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานโค้ดจะได้ผลลัพธ์ดังนี้ -

Element   Value 
0         100 
1         101 
2         102 
3         103 
4         104 
5         105 
6         106 
7         107 
8         108 
9         109

อาร์เรย์แบบคงที่เทียบกับอาร์เรย์แบบไดนามิก

หากระบุความยาวของอาร์เรย์ขณะเขียนโปรแกรมอาร์เรย์นั้นจะเป็นอาร์เรย์แบบคงที่ เมื่อความยาวสามารถเปลี่ยนแปลงได้ในระหว่างการทำงานของโปรแกรมอาร์เรย์นั้นจะเป็นอาร์เรย์แบบไดนามิก

การกำหนดอาร์เรย์แบบไดนามิกนั้นง่ายกว่าการกำหนดอาร์เรย์ที่มีความยาวคงที่เนื่องจากการละเว้นความยาวจะทำให้อาร์เรย์แบบไดนามิก -

int[] dynamicArray;

คุณสมบัติอาร์เรย์

นี่คือคุณสมบัติของอาร์เรย์ -

ซีเนียร์ คุณสมบัติและคำอธิบาย
1

.init

อาร์เรย์แบบคงที่จะส่งคืนลิเทอรัลอาร์เรย์โดยแต่ละองค์ประกอบของลิเทอรัลเป็นคุณสมบัติ. init ของชนิดองค์ประกอบอาร์เรย์

2

.sizeof

อาร์เรย์แบบคงที่จะส่งกลับความยาวอาร์เรย์คูณด้วยจำนวนไบต์ต่อองค์ประกอบอาร์เรย์ในขณะที่อาร์เรย์แบบไดนามิกส่งกลับขนาดของการอ้างอิงอาร์เรย์แบบไดนามิกซึ่งเป็น 8 ในการสร้าง 32 บิตและ 16 ในการสร้าง 64 บิต

3

.length

อาร์เรย์แบบคงที่จะส่งคืนจำนวนองค์ประกอบในอาร์เรย์ในขณะที่อาร์เรย์แบบไดนามิกใช้เพื่อรับ / กำหนดจำนวนองค์ประกอบในอาร์เรย์ ความยาวเป็นประเภท size_t

4

.ptr

ส่งกลับตัวชี้ไปยังองค์ประกอบแรกของอาร์เรย์

5

.dup

สร้างอาร์เรย์แบบไดนามิกที่มีขนาดเท่ากันและคัดลอกเนื้อหาของอาร์เรย์ลงในนั้น

6

.idup

สร้างอาร์เรย์แบบไดนามิกที่มีขนาดเท่ากันและคัดลอกเนื้อหาของอาร์เรย์ลงในนั้น สำเนาถูกพิมพ์ว่าไม่เปลี่ยนรูป

7

.reverse

ย้อนกลับตามลำดับขององค์ประกอบในอาร์เรย์ ส่งคืนอาร์เรย์

8

.sort

จัดเรียงตามลำดับขององค์ประกอบในอาร์เรย์ ส่งคืนอาร์เรย์

ตัวอย่าง

ตัวอย่างต่อไปนี้อธิบายคุณสมบัติต่างๆของอาร์เรย์ -

import std.stdio;

void main() {
   int n[ 5 ]; // n is an array of 5 integers 
   
   // initialize elements of array n to 0 
   for ( int i = 0; i < 5; i++ ) { 
      n[ i ] = i + 100; // set element at location i to i + 100 
   }
   
   writeln("Initialized value:",n.init); 
   
   writeln("Length: ",n.length); 
   writeln("Size of: ",n.sizeof); 
   writeln("Pointer:",n.ptr); 
   
   writeln("Duplicate Array: ",n.dup); 
   writeln("iDuplicate Array: ",n.idup);
   
   n = n.reverse.dup; 
   writeln("Reversed Array: ",n);
   
   writeln("Sorted Array: ",n.sort); 
}

เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานโค้ดจะได้ผลลัพธ์ดังนี้ -

Initialized value:[0, 0, 0, 0, 0] 

Length: 5 
Size of: 20 

Pointer:7FFF5A373920 
Duplicate Array: [100, 101, 102, 103, 104]
iDuplicate Array: [100, 101, 102, 103, 104] 
Reversed Array: [104, 103, 102, 101, 100] 
Sorted Array: [100, 101, 102, 103, 104]

อาร์เรย์หลายมิติใน D

การเขียนโปรแกรม D ทำให้อาร์เรย์หลายมิติ นี่คือรูปแบบทั่วไปของการประกาศอาร์เรย์หลายมิติ -

type name[size1][size2]...[sizeN];

ตัวอย่าง

คำประกาศต่อไปนี้สร้างสามมิติ 5 10. อาร์เรย์จำนวนเต็ม 4 ตัว -

int threedim[5][10][4];

อาร์เรย์สองมิติใน D

รูปแบบที่ง่ายที่สุดของอาร์เรย์หลายมิติคืออาร์เรย์สองมิติ โดยพื้นฐานแล้วอาร์เรย์สองมิติคือรายการของอาร์เรย์หนึ่งมิติ ในการประกาศอาร์เรย์จำนวนเต็มสองมิติขนาด [x, y] คุณจะต้องเขียนไวยากรณ์ดังนี้ -

type arrayName [ x ][ y ];

ที่ไหน type สามารถเป็นประเภทข้อมูลการเขียนโปรแกรม D ที่ถูกต้องและ arrayName จะเป็นตัวระบุการเขียนโปรแกรม D ที่ถูกต้อง

โดยที่typeสามารถเป็นชนิดข้อมูลการเขียนโปรแกรม D ที่ถูกต้องและarrayNameคือตัวระบุการเขียนโปรแกรม D ที่ถูกต้อง

อาร์เรย์สองมิติสามารถคิดเป็นตารางซึ่งมี x จำนวนแถวและจำนวนคอลัมน์ y อาร์เรย์สองมิติa ที่มีสามแถวและสี่คอลัมน์สามารถแสดงได้ดังต่อไปนี้ -

ดังนั้นทุกองค์ประกอบในอาร์เรย์ a ถูกระบุโดยองค์ประกอบเป็น a[ i ][ j ], ที่ไหน a คือชื่อของอาร์เรย์และ i และ j คือตัวห้อยที่ระบุแต่ละองค์ประกอบโดยไม่ซ้ำกันในไฟล์.

การเริ่มต้นอาร์เรย์สองมิติ

อาร์เรย์แบบหลายมิติอาจเริ่มต้นโดยการระบุค่าวงเล็บสำหรับแต่ละแถว อาร์เรย์ต่อไปนี้มี 3 แถวและแต่ละแถวมี 4 คอลัมน์

int a[3][4] = [   
   [0, 1, 2, 3] ,   /*  initializers for row indexed by 0 */ 
   [4, 5, 6, 7] ,   /*  initializers for row indexed by 1 */ 
   [8, 9, 10, 11]   /*  initializers for row indexed by 2 */ 
];

วงเล็บปีกกาที่ซ้อนกันซึ่งระบุแถวที่ต้องการเป็นทางเลือก การเริ่มต้นต่อไปนี้เทียบเท่ากับตัวอย่างก่อนหน้านี้ -

int a[3][4] = [0,1,2,3,4,5,6,7,8,9,10,11];

การเข้าถึงองค์ประกอบอาร์เรย์สองมิติ

องค์ประกอบในอาร์เรย์ 2 มิติเข้าถึงได้โดยใช้ตัวห้อยหมายถึงดัชนีแถวและดัชนีคอลัมน์ของอาร์เรย์ ตัวอย่างเช่น

int val = a[2][3];

คำสั่งข้างต้นนำองค์ประกอบที่ 4 จากแถวที่ 3 ของอาร์เรย์ คุณสามารถตรวจสอบได้ใน digram ด้านบน

import std.stdio; 
  
void main () { 
   // an array with 5 rows and 2 columns. 
   int a[5][2] = [ [0,0], [1,2], [2,4], [3,6],[4,8]];  
   
   // output each array element's value                       
   for ( int i = 0; i < 5; i++ ) for ( int j = 0; j < 2; j++ ) {
      writeln( "a[" , i , "][" , j , "]: ",a[i][j]); 
   }
}

เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานโค้ดจะได้ผลลัพธ์ดังนี้ -

a[0][0]: 0 
a[0][1]: 0 
a[1][0]: 1 
a[1][1]: 2 
a[2][0]: 2 
a[2][1]: 4 
a[3][0]: 3 
a[3][1]: 6 
a[4][0]: 4 
a[4][1]: 8

การดำเนินการอาร์เรย์ทั่วไปใน D

นี่คือการดำเนินการต่างๆที่ดำเนินการในอาร์เรย์ -

การแบ่งอาร์เรย์

เรามักใช้ส่วนหนึ่งของอาร์เรย์และการแบ่งส่วนอาร์เรย์มักมีประโยชน์มาก ตัวอย่างง่ายๆสำหรับการแบ่งส่วนอาร์เรย์แสดงไว้ด้านล่าง

import std.stdio;
  
void main () { 
   // an array with 5 elements. 
   double a[5] = [1000.0, 2.0, 3.4, 17.0, 50.0]; 
   double[] b;
   
   b = a[1..3]; 
   writeln(b); 
}

เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานโค้ดจะได้ผลลัพธ์ดังนี้ -

[2, 3.4]

การคัดลอกอาร์เรย์

เรายังใช้การคัดลอกอาร์เรย์ ตัวอย่างง่ายๆสำหรับการคัดลอกอาร์เรย์แสดงไว้ด้านล่าง

import std.stdio;

void main () { 
   // an array with 5 elements. 
   double a[5] = [1000.0, 2.0, 3.4, 17.0, 50.0]; 
   double b[5]; 
   writeln("Array a:",a); 
   writeln("Array b:",b);  
   
   b[] = a;      // the 5 elements of a[5] are copied into b[5] 
   writeln("Array b:",b);  
   
   b[] = a[];   // the 5 elements of a[3] are copied into b[5] 
   writeln("Array b:",b); 
   
   b[1..2] = a[0..1]; // same as b[1] = a[0] 
   writeln("Array b:",b); 
   
   b[0..2] = a[1..3]; // same as b[0] = a[1], b[1] = a[2]
   writeln("Array b:",b); 
}

เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานโค้ดจะได้ผลลัพธ์ดังนี้ -

Array a:[1000, 2, 3.4, 17, 50] 
Array b:[nan, nan, nan, nan, nan] 
Array b:[1000, 2, 3.4, 17, 50] 
Array b:[1000, 2, 3.4, 17, 50] 
Array b:[1000, 1000, 3.4, 17, 50] 
Array b:[2, 3.4, 3.4, 17, 50]

การตั้งค่าอาร์เรย์

ตัวอย่างง่ายๆสำหรับการตั้งค่าในอาร์เรย์แสดงไว้ด้านล่าง

import std.stdio;

void main () { 
   // an array with 5 elements. 
   double a[5]; 
   a[] = 5; 
   writeln("Array a:",a); 
}

เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานโค้ดจะได้ผลลัพธ์ดังนี้ -

Array a:[5, 5, 5, 5, 5]

การต่ออาร์เรย์

ตัวอย่างง่ายๆสำหรับการต่ออาร์เรย์สองอาร์เรย์แสดงไว้ด้านล่าง

import std.stdio;

void main () { 
   // an array with 5 elements. 
   double a[5] = 5; 
   double b[5] = 10; 
   double [] c; 
   c = a~b; 
   writeln("Array c: ",c); 
}

เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานโค้ดจะได้ผลลัพธ์ดังนี้ -

Array c: [5, 5, 5, 5, 5, 10, 10, 10, 10, 10]