อาร์เรย์คือชุดของข้อมูลที่เรียงลำดับ องค์ประกอบในอาร์เรย์อาจไม่อยู่ในประเภทข้อมูลเดียวกัน ใช้ชื่ออาร์เรย์แบบรวมและตัวห้อยเพื่อระบุองค์ประกอบในอาร์เรย์โดยไม่ซ้ำกัน การเปลี่ยนองค์ประกอบหนึ่งจะไม่ส่งผลกระทบต่อองค์ประกอบอื่นๆ ตัวห้อยของอาร์เรย์มีขอบเขตและแบ่งออกเป็นขอบเขตล่างและขอบเขตบน คุณสามารถประกาศอาร์เรย์ได้โดยใช้ Dim, Private, Public หรือ Static และรูปแบบไวยากรณ์จะเหมือนกัน ต่อไปนี้จะแนะนำวิธีการประกาศอาร์เรย์โดยใช้ Dim เท่านั้น
1. คำจำกัดความและการประกาศอาร์เรย์
ไวยากรณ์คำจำกัดความของอาร์เรย์มีดังนี้:
ชื่ออาร์เรย์ Dim ([[ขอบเขตล่างของตัวห้อยถึง] ขอบเขตด้านบนของตัวห้อย]) [เป็นประเภทข้อมูล]
ตัวอย่างเช่น (สมมติว่าขอบเขตล่างเริ่มต้นสำหรับอาร์เรย์ในโมดูลปัจจุบันคือ 0)):
① Dim A(10) เป็นจำนวนเต็ม
ระบุว่าชื่ออาร์เรย์คือ A ขอบเขตล่างของตัวห้อยของอาร์เรย์นี้คือค่าเริ่มต้น 0 และขอบเขตบนของตัวห้อยคือ 10 มี 11 องค์ประกอบประเภท Integer ตั้งแต่ A(0), A(1 ) ถึง A(10)
② หรี่ B(1 ถึง 20) เป็นจำนวนเต็ม
ระบุว่าชื่ออาร์เรย์คือ B ขอบเขตล่างของตัวห้อยของอาร์เรย์นี้คือ 1 ขอบเขตบนของตัวห้อยคือ 20 และมีองค์ประกอบประเภท Integer 20 องค์ประกอบ ตั้งแต่ B(1) ถึง B(20)
3Dim DayArray (50)
ระบุว่า DayArray เป็นอาร์เรย์ Variant ที่มีองค์ประกอบที่จัดทำดัชนีไว้ 51 รายการ (ตั้งแต่ 0 ถึง 50)
④Dim Matrix(3, 4) เป็นจำนวนเต็ม
บ่งชี้ว่าเมทริกซ์เป็นอาร์เรย์จำนวนเต็มสองมิติ
⑤ หรี่ MyMatrix (1 ถึง 5, 4 ถึง 9, 3 ถึง 5) เป็นสองเท่า
บ่งชี้ว่า MyMatrix เป็นอาร์เรย์คู่สามมิติที่มีขอบเขตบนและล่างระบุไว้อย่างชัดเจน
⑥วันเกิดติ่มซำ (1 ถึง 10) เป็นวันที่
ระบุว่า BirthdayDay เป็นอาร์เรย์ประเภทวันที่ซึ่งมีดัชนีตั้งแต่ 1 ถึง 10
2. คำสั่งฐานตัวเลือก
คำสั่งฐานตัวเลือกถูกใช้ในระดับโมดูลเพื่อประกาศขอบเขตล่างเริ่มต้นสำหรับตัวห้อยอาร์เรย์
ไวยากรณ์ของคำสั่ง Option Base เป็นดังนี้:
ฐานตัวเลือก {0 |. 1}
หมายเหตุ: ตามค่าเริ่มต้น ขอบเขตล่างของอาร์เรย์จะเป็น 0 และไม่จำเป็นต้องใช้คำสั่ง Option Base ในขณะนี้ หากคุณใช้คำสั่งนี้เพื่อระบุขอบเขตล่างของอาร์เรย์ที่ 1 คุณต้องใช้คำสั่ง Option Base ก่อนการประกาศอาร์เรย์ของโมดูล
สังเกต:
(1) ส่วนคำสั่ง To ในคำสั่ง Dim, Private, Public, ReDim และ Static ให้วิธีที่ยืดหยุ่นมากขึ้นในการควบคุมตัวห้อยของอาร์เรย์ อย่างไรก็ตาม หากคุณไม่ได้ระบุขอบเขตล่างอย่างชัดเจนโดยใช้ส่วนคำสั่ง To คุณสามารถใช้ Option Base เพื่อตั้งค่าขอบเขตล่างเริ่มต้นเป็น 1 ขอบเขตล่างของอาร์เรย์ที่สร้างขึ้นโดยใช้ฟังก์ชัน Array ยังถูกกำหนดโดยขอบเขตล่างที่ระบุโดยคำสั่ง Option Base เว้นแต่ว่าอาร์เรย์จะมีคุณสมบัติตามชื่อไลบรารีประเภท (เช่น VBA.Array) หากมีคุณสมบัติตามประเภท ชื่อไลบรารี จากนั้นขอบเขตล่างของอาร์เรย์ที่สร้างขึ้นโดยใช้ฟังก์ชัน Array จะเป็นขอบเขตล่างไม่ได้รับผลกระทบจาก Option Base
(1) คำสั่ง Option Base มีผลกับขอบเขตล่างของอาร์เรย์ที่อยู่ในโมดูลที่มีคำสั่งเท่านั้น
หมายเหตุบางประการเกี่ยวกับการประกาศอาร์เรย์:
กฎการตั้งชื่อสำหรับชื่ออาร์เรย์จะเหมือนกับกฎการตั้งชื่อตัวแปร
2) ชื่ออาร์เรย์อยู่ในวงเล็บ ไม่สามารถใช้วงเล็บเหลี่ยมได้ ซึ่งต่างจากภาษา C
3. ขอบเขตล่างของตัวห้อยต้องไม่มากกว่าขอบเขตบน
④ คุณสามารถใช้ชื่อตัวแปรหรือชื่อคงที่ (รวมถึงจำนวนจริง) เป็นขอบเขตของตัวห้อยได้ เมื่อขอบเขตของตัวห้อยเป็นชื่อคงที่ ขนาดของอาร์เรย์จะได้รับการแก้ไข เมื่อขอบเขตของตัวห้อยเป็นชื่อตัวแปร ขนาดของอาร์เรย์สามารถกำหนดแบบไดนามิกได้ กล่าวคือ ขนาดของอาร์เรย์จะขึ้นอยู่กับ ค่าของตัวแปรระหว่างการรันโปรแกรม ดังนั้นอาร์เรย์ใน VB จึงสามารถแบ่งได้เป็น 2 ประเภทคืออาร์เรย์แบบคงที่และอาร์เรย์แบบไดนามิก
3. อาร์เรย์แบบคงที่
อาร์เรย์แบบคงที่หมายถึงจำนวนองค์ประกอบอาร์เรย์ได้รับการแก้ไขแล้ว นั่นคือ ขนาดของพื้นที่หน่วยความจำที่องค์ประกอบเหล่านั้นครอบครองได้รับการแก้ไข ตามขนาดที่แตกต่างกันของอาร์เรย์ขนาดคงที่ มันสามารถแบ่งออกเป็นอาร์เรย์หนึ่งมิติและอาร์เรย์หลายมิติ
รูปแบบไวยากรณ์สำหรับการประกาศอาร์เรย์หลายมิติคือ:
ชื่ออาร์เรย์ Dim ([รายการขอบเขตตัวห้อย]) [ตามประเภทข้อมูล]
รูปแบบคำจำกัดความของขอบเขตตัวห้อย: [ตัวห้อยขอบเขตล่างถึง] ตัวห้อยขอบเขตบน
รายการขอบเขตตัวห้อยหมายถึงขอบเขตตัวห้อยของแต่ละมิติของอาร์เรย์ที่คั่นด้วยเครื่องหมายจุลภาคนั่นคือ
[ขอบเขตล่างของตัวห้อยถึง] ขอบเขตบนของตัวห้อย, [ขอบเขตล่างของตัวห้อยถึง] ขอบเขตบนของตัวห้อย, ..., [ขอบเขตบนของตัวห้อยถึง] ขอบเขตบนของตัวห้อย
(มิติที่หนึ่ง) (มิติที่สอง) (มิติที่ n)
เมื่อ n=1 อาร์เรย์จะเรียกว่าอาร์เรย์ 1 มิติ เมื่อ n=2 อาร์เรย์จะเรียกว่าอาร์เรย์ 2 มิติ และต่อๆ ไป เมื่อ n=m อาร์เรย์จะเรียกว่าอาร์เรย์ m
ตัวอย่างต่อไปนี้แนะนำการใช้อาร์เรย์หนึ่งมิติ
'ประกาศอาร์เรย์สตริง FriendsName ที่มีความยาว 51
Dim FriendsName(50) เป็นสตริง
'ประกาศคลาสอาร์เรย์จำนวนเต็มโกลบอลที่มีความยาว 11
คลาสสาธารณะ (10) เป็นจำนวนเต็ม
จำนวนองค์ประกอบในอาร์เรย์หนึ่งมิติคือ (ขอบเขตบน - ขอบเขตล่าง + 1)
คุณสามารถใช้คำสั่งวนซ้ำเพื่อกำหนดค่าเริ่มต้นให้กับอาร์เรย์ได้ เช่น:
หรี่ฉันเป็นจำนวนเต็ม
สำหรับ I = 0 ถึง 11 'ใช้การควบคุมโฟลว์โปรแกรมของคำสั่งลูป
ค(ฉัน) = ฉัน
ต่อไปฉัน
ถ้าขอบเขตล่างไม่ได้ระบุอย่างชัดเจน ขอบเขตล่างของอาร์เรย์จะถูกควบคุมโดยคำสั่ง Option Base หากไม่มีคำสั่ง Option Base ขอบเขตล่างจะมีค่าเริ่มต้นเป็น 0
มิติของอาร์เรย์ไม่ได้จำกัดอยู่ที่ 2 ใน VB สามารถขยายได้ถึง 60 มิติ ในการใช้งานจริง มีแอปพลิเคชันไม่มากนักสำหรับอาร์เรย์ที่มีมากกว่าสามมิติ เมื่อกำหนดอาร์เรย์หลายมิติ คุณจำเป็นต้องมีคำสั่ง Dim เพียงคำสั่งเดียวเพื่อระบุขอบเขตตัวห้อยทั้งหมดของอาร์เรย์ การใช้อาร์เรย์หลายมิติสามารถแสดงข้อมูลทางสถิติที่มีความหมายได้อย่างง่ายดาย ตัวอย่างเช่น:
กำไรเล็กน้อย (16,10,12) เป็นสกุลเงิน
อาร์เรย์กำไรนี้สามารถใช้เพื่อแสดงกำไรของห้างสรรพสินค้าบางแห่งโดยมีชื่อร้านค้า แผนก และเดือนเป็นพารามิเตอร์ ตัวอย่างเช่น: กำไร (2,8,11) หมายถึงกำไรของแผนกที่แปดของสาขาที่สองในเดือนพฤศจิกายน
4. อาร์เรย์แบบไดนามิก
บางครั้งอาจเป็นไปไม่ได้ที่จะทราบว่าอาร์เรย์จำเป็นต้องใช้ขนาดใหญ่เพียงใดเพื่อตอบสนองความต้องการที่แท้จริงก่อนที่จะเริ่มใช้งานอาร์เรย์ แน่นอนว่าขนาดของอาเรย์สามารถกำหนดให้ใหญ่พอที่จะตอบสนองความต้องการใช้งานจริงได้ แต่วิธีนี้ไม่มีประสิทธิภาพมากนัก (เปลืองพื้นที่หน่วยความจำขนาดใหญ่) หากคุณใช้อาร์เรย์แบบไดนามิก คุณสามารถกำหนดขนาดของอาร์เรย์ได้อย่างแม่นยำตามความต้องการที่แท้จริงในขณะที่โปรแกรมกำลังทำงาน
เมื่อประกาศอาร์เรย์ การไม่ระบุรายการมิติจะประกาศอาร์เรย์เป็นอาร์เรย์แบบไดนามิก ตัวอย่างเช่น:
Dim MyArry() เป็นจำนวนเต็ม
ก่อนที่จะใช้อาร์เรย์แบบไดนามิก คุณต้องใช้คำสั่ง ReDim เพื่อกำหนดใหม่ ตัวอย่างเช่น อาร์เรย์ MyArry ที่ประกาศก่อนหน้านี้สามารถกำหนดเป็นอาร์เรย์สองมิติแบบไดนามิกได้โดยใช้คำสั่งต่อไปนี้
รีดิมมายอาร์รี่(10,10)
คุณยังสามารถกำหนดอาร์เรย์แบบไดนามิกได้หลายครั้งโดยดำเนินการคำสั่ง ReDim ซ้ำๆ จำนวนมิติสูงสุดที่สามารถกำหนดได้โดยใช้ ReDim คือ 60 คำสั่ง ReDim สามารถเปลี่ยนจำนวนองค์ประกอบในแต่ละมิติของอาร์เรย์ได้ แต่จะเปลี่ยนแปลงจำนวนมิติไม่ได้ ต่อไปนี้เป็นตัวอย่างของการประยุกต์ใช้มาตรฐานของคำสั่ง ReDim
Dim MyArry() As Single 'ประกาศอาร์เรย์แบบไดนามิก
ReDim MyArry(30,20,10) 'กำหนดอาร์เรย์ใหม่
ReDim MyArry(50,23,21) 'กำหนดอาร์เรย์ใหม่อีกครั้ง
ไวยากรณ์ของ ReDim เหมือนกับของ Dim นอกจากนี้ยังมีตัวเลือก Preserve คำสำคัญ:
ReDim รักษาชื่ออาร์เรย์ ([ [ขอบเขตล่างถึง] ขอบเขตบน]) [เป็นประเภทข้อมูล]
ตัวอย่างเช่น:
รีดิม มายอาร์รี่(50,23,21)
ReDim อนุรักษ์ MyArry(50,23,50)
หมายเหตุ: เมื่อใช้ ReDim การกำหนดอาร์เรย์ใหม่จะทำให้ค่าขององค์ประกอบอาร์เรย์ทั้งหมดหายไป ในขณะที่การใช้ Preserve สามารถเก็บข้อมูลได้ แต่การใช้ Preserve สามารถรักษาข้อมูลของอาร์เรย์ได้เฉพาะเมื่อเปลี่ยนขนาดของมิติสุดท้ายของอาร์เรย์เท่านั้น สำหรับอาร์เรย์หนึ่งมิติ ข้อมูลทั้งหมดจะถูกเก็บไว้ แต่สำหรับอาร์เรย์หลายมิติ: สามารถเปลี่ยนขนาดมิติสุดท้ายเท่านั้นเพื่อเก็บข้อมูลอาร์เรย์ทั้งหมด มิฉะนั้นจะเกิดข้อผิดพลาด
5. ฟังก์ชัน LBound และฟังก์ชัน UBound
ทั้งฟังก์ชัน LBound และฟังก์ชัน Ubound ส่งคืนข้อมูลประเภทยาว ค่าที่ได้รับจากค่าแรกคือตัวห้อยขั้นต่ำสำหรับมิติอาร์เรย์ที่ระบุ ในขณะที่ค่าที่ได้รับจากค่าหลังคือตัวห้อยสูงสุด ไวยากรณ์ของพวกเขาคือ:
LBound(ชื่ออาร์เรย์[, มิติที่ระบุ])
UBound(ชื่ออาร์เรย์[, มิติที่ระบุ])
ต้องระบุชื่ออาร์เรย์ จำนวนมิติที่ระบุเป็นทางเลือก และระบุว่ามิติใดจะส่งกลับขอบเขตล่าง 1 หมายถึงมิติแรก 2 หมายถึงมิติที่สอง และอื่นๆ หากละเว้นมิติที่ระบุ จะมีค่าเริ่มต้นเป็น 1
สำหรับวิธีการใช้ฟังก์ชัน LBound และฟังก์ชัน UBound ดูตัวอย่างต่อไปนี้:
Dim A(1 ถึง 100,3,-3 ถึง 4) As Integer 'กำหนดอาร์เรย์สามมิติ โดยสมมติว่าไม่ได้ใช้ภาษาฐานตัวเลือก
' คำสั่งเปลี่ยนค่าเริ่มต้นของขอบเขตล่างของอาร์เรย์
ใช้ฟังก์ชัน Lbound และ Ubound บนอาร์เรย์ A รายการค่าที่ส่งคืนมีดังนี้
ขอบเขตล่างเริ่มต้นสำหรับมิติทั้งหมดขึ้นอยู่กับการตั้งค่าของคำสั่งฐานตัวเลือก จะเห็นได้ว่าการใช้ฟังก์ชัน LBound และฟังก์ชัน UBound บนอาร์เรย์สามารถใช้เพื่อกำหนดจำนวนองค์ประกอบในอาร์เรย์ได้
สำหรับอาร์เรย์ที่มีการระบุมิติโดยใช้ส่วนคำสั่ง To ในการประกาศ สามารถใช้จำนวนเต็มใดๆ เป็นขอบเขตล่างได้โดยไม่ถูกจำกัดโดยคำสั่ง Option Base
6. คุณสมบัติขั้นสูงของอาร์เรย์
แม้ว่าอาร์เรย์มักใช้เพื่อจัดเก็บกลุ่มของตัวแปร แต่อาร์เรย์ก็มีประโยชน์ในรูปแบบอื่น คุณสามารถกำหนดเนื้อหาของอาร์เรย์หนึ่งให้กับอีกอาร์เรย์หนึ่ง สร้างฟังก์ชันที่ส่งคืนอาร์เรย์ และคุณสามารถสร้างคุณสมบัติที่ส่งคืนอาร์เรย์ได้ ในหลายกรณี เทคนิคเหล่านี้สามารถปรับปรุงประสิทธิภาพของแอปพลิเคชันได้
เช่นเดียวกับที่คุณสามารถกำหนดค่าของตัวแปรหนึ่งให้กับตัวแปรอื่นได้ เช่น StrA = StrB คุณยังสามารถกำหนดเนื้อหาของอาร์เรย์หนึ่งให้กับอีกอาร์เรย์หนึ่งได้อีกด้วย ตัวอย่างเช่น คุณต้องการคัดลอกอาร์เรย์ไบต์จากที่หนึ่งไปยังอีกที่หนึ่ง ซึ่งสามารถทำได้โดยการคัดลอกทีละไบต์ ขั้นตอนมีดังนี้:
Sub ByteCopy(oldCopy() As Byte, newCopy() As Byte)
'พารามิเตอร์ oldCopy() คืออาร์เรย์ต้นทาง newCopy() คืออาร์เรย์เป้าหมาย
หรี่ฉันเป็นจำนวนเต็ม
ReDim newCopy (Lbound (oldCopy) ถึง UBound (oldCopy)) 'กำหนดอาร์เรย์ไดนามิกใหม่
สำหรับ i = Lbound(oldCopy) ถึง Ubound(oldCopy) 'การกำหนดลูป
ใหม่Copy(i) = oldCopy(i)
ต่อไป
จบหมวดย่อย
วิธีที่ง่ายกว่าและมีประสิทธิภาพมากกว่าคือการกำหนดอาร์เรย์หนึ่งให้กับอีกอาร์เรย์หนึ่งโดยตรง:
Sub ByteCopy(oldCopy() As Byte, newCopy() As Byte)
'พารามิเตอร์ oldCopy() คืออาร์เรย์ต้นทาง newCopy() คืออาร์เรย์เป้าหมาย
newCopy = oldCopy 'ใช้อาร์เรย์เพื่อกำหนดโดยตรง
จบหมวดย่อย
มีกฎบางข้อที่ต้องคำนึงถึงเกี่ยวกับการกำหนดตัวแปร ตัวอย่างเช่น แม้ว่าตัวแปรที่ประกาศเป็นจำนวนเต็มสามารถกำหนดให้กับตัวแปรที่ประกาศเป็น long ได้โดยไม่มีปัญหาใดๆ การกำหนด long ให้กับตัวแปรจำนวนเต็มอาจทำให้เกิดข้อผิดพลาดล้นได้อย่างง่ายดาย นอกเหนือจากการปฏิบัติตามกฎที่เกี่ยวข้องกับการกำหนดระหว่างตัวแปรประเภทข้อมูลแล้ว การกำหนดอาร์เรย์ยังต้องเป็นไปตามกฎอื่นๆ รวมถึงจำนวนขนาดอาร์เรย์ ขนาดของแต่ละมิติ และไม่ว่าอาร์เรย์จะคงที่หรือไดนามิกก็ตาม
1 ปัจจัยหลายประการที่ต้องพิจารณาเมื่อกำหนดอาร์เรย์ด้วยมิติข้อมูลและประเภทข้อมูลที่แตกต่างกัน
ประเภทอาร์เรย์ทางด้านซ้ายของตัวดำเนินการกำหนด: อาร์เรย์คงที่ (Dim x(1 ถึง 10) As Integer) หรืออาร์เรย์แบบไดนามิก (Dim x() As Integer)
ขนาดของอาร์เรย์ทางด้านซ้ายของตัวดำเนินการกำหนดตรงกับขนาดของอาร์เรย์ทางด้านขวาของตัวดำเนินการกำหนดหรือไม่
l ไม่ว่าจำนวนองค์ประกอบอาร์เรย์ในแต่ละมิติของอาร์เรย์ทั้งสองด้านของตัวดำเนินการที่ได้รับมอบหมายจะตรงกันหรือไม่ ขนาดอาจตรงกันแม้ว่าการประกาศอาร์เรย์จะแตกต่างกันก็ตาม ตัวอย่างเช่น หากองค์ประกอบของแต่ละมิติของอาร์เรย์หนึ่งมีหมายเลขเริ่มต้นจาก 0 และองค์ประกอบของอาร์เรย์อื่นมีหมายเลขเริ่มต้นจาก 1 มิติข้อมูลก็อาจตรงกันเช่นกัน
ประเภทข้อมูลขององค์ประกอบทั้งหมดทั้งสองด้านของตัวดำเนินการที่ได้รับมอบหมายจะต้องเข้ากันได้ กฎเหล่านี้สอดคล้องกับกฎสำหรับการกำหนดตัวแปร
ตารางที่ 3-6 แสดงผลกระทบของปัจจัยเหล่านี้:
ข้อผิดพลาดในการกำหนดอาร์เรย์อาจเกิดขึ้นในเวลาคอมไพล์หรือรันไทม์ (เช่น หากประเภทข้อมูลไม่สามารถส่งได้หรือการกำหนดพยายามประกาศอีกครั้ง (ReDim) อาร์เรย์แบบคงที่) ออกแบบโปรแกรมของคุณเพื่อเพิ่มการจัดการข้อผิดพลาดเพื่อให้แน่ใจว่าอาร์เรย์ตรงกันก่อนกำหนด
②เขียนฟังก์ชันที่ส่งคืนอาร์เรย์
สามารถส่งคืนชุดค่าจากฟังก์ชันได้ ตัวอย่างเช่น การส่งคืนชุดไบต์จากฟังก์ชันโดยไม่ต้องแปลงเป็นสตริงแล้วกลับมาอีกครั้ง
นี่คือตัวอย่างง่ายๆ โดยใช้ฟังก์ชันที่ส่งคืนอาร์เรย์ไบต์:
แบบฟอร์มย่อยส่วนตัว_Load()
ติ่มขเป็นไบต์
หรี่ฉันเป็นจำนวนเต็ม
Dim ReturnArray() เป็นไบต์
ข = C ไบต์ (54)
ReturnArray() = ArrayFunction(b) 'ฟังก์ชันการโทร
สำหรับ i = Lbound(ReturnArray) ถึง Ubound(ReturnArray)
Msgbox ReturnArray(i) 'วนซ้ำผ่านกล่องข้อความป๊อปอัปเพื่อแสดงค่าอาร์เรย์
ต่อไป
จบหมวดย่อย
ฟังก์ชั่นสาธารณะ ArrayFunction(b As Byte) As Byte()
Dim x(2) เป็นไบต์
x(0) = ข
x(1) = b + CByte(200)
x(2) = ข + ข
ArrayFunction = x 'ส่งคืนผลลัพธ์เป็นอาร์เรย์ x
สิ้นสุดฟังก์ชัน
หลังจากรันตัวอย่างข้างต้นแล้ว ReturnArray() คืออาร์เรย์สามองค์ประกอบที่มีค่าที่กำหนดให้กับอาร์เรย์ใน ArrayFunction คำสั่ง ArrayFunction ส่งผ่านอาร์เรย์เป็นพารามิเตอร์ ชนิดข้อมูลของอาร์เรย์จะต้องเหมือนกับชนิดข้อมูลของฟังก์ชัน (ไบต์ในกรณีนี้) เนื่องจากนี่คือการเรียกใช้ฟังก์ชัน วงเล็บจึงไม่จำเป็นเมื่อส่งอาร์เรย์
สังเกต:
1. แม้ว่าจะสามารถส่งคืนอาร์เรย์ได้โดยการกำหนดให้กับอาร์เรย์อื่น (ArrayFunction = x()) แต่ไม่แนะนำให้ใช้วิธีนี้เนื่องจากเหตุผลด้านประสิทธิภาพ
2. ต้องระบุประเภทสำหรับฟังก์ชันที่ส่งคืนอาร์เรย์ ประเภทนี้สามารถเป็นตัวแปรได้ ด้วยวิธีนี้ ฟังก์ชัน X() As Variant() ใช้ได้ และฟังก์ชัน X() As () จะล้มเหลว
3. เมื่อเรียกใช้ฟังก์ชันที่ส่งคืนอาร์เรย์ ตัวแปรที่ใช้จัดเก็บค่าที่ส่งคืนจะต้องเป็นอาร์เรย์ด้วย และประเภทข้อมูลจะต้องเหมือนกับประเภทที่ส่งคืนของฟังก์ชัน มิฉะนั้นข้อผิดพลาดประเภทที่ไม่ตรงกันจะปรากฏขึ้น
กำหนดอาร์เรย์อย่างง่าย
มีสองวิธีในการกำหนดและเริ่มต้นอาร์เรย์ใน asp ลองดูตัวอย่างของแต่ละวิธี:
วิธีที่หนึ่ง:
MyArray = อาร์เรย์ (ม.ค. ก.พ. มี.ค. เม.ย. พ.ค. มิ.ย. ก.ค. ส.ค. ก.ย. ต.ค. พ.ย. ธ.ค.)
ขนาดของอาร์เรย์ถูกกำหนดโดยจำนวนองค์ประกอบที่เตรียมใช้งาน
วิธีที่สอง:
Dim myArray(2) 'ระบุขนาดอาร์เรย์
myArray(0)=ม.ค
myArray(1)=ก.พ
การขยายอาร์เรย์แบบไดนามิก
ติ่มซำ myArray()
REDIM myArray(20) 'กำหนดขนาดอาร์เรย์ใหม่เป็น 20
ReDim Preserve MyArray(i) 'Preserve จะเก็บข้อมูลต้นฉบับไว้ในอาร์เรย์
อาร์เรย์สองมิติ
ตัวอย่าง:
dim MyArray(5,10) 'กำหนดอาร์เรย์สองมิติ
ตัวอย่างของการมอบหมายสองมิติ:
MYArray(3,3)=100
นอกจากนี้ยังมีวิธีการนำไปใช้ปลอมสำหรับอาร์เรย์สองมิติ:
dimMyArray(5)
MyArray(0)=Array(...) 'อาร์เรย์หนึ่งมิติ
MyArray(1)=Array(...)'อาร์เรย์หนึ่งมิติ
-
เมื่อเข้าใช้งานให้ใช้รูปแบบ MyArray(x)(y)
ดัชนีอาร์เรย์
ใช้วิธีการข้างต้นเพื่อกำหนดอาร์เรย์ ตัวห้อยขององค์ประกอบแรกของแต่ละอาร์เรย์มิติคือ 0 และตัวห้อยขององค์ประกอบสุดท้ายคือจำนวนองค์ประกอบ -1
แต่คุณยังสามารถระบุตัวห้อยของอาร์เรย์ได้ เช่น:
dim MyArray1(3 to 10) 'ตัวห้อยคือจาก 3 ถึง 10, MyArray(3) รับค่าขององค์ประกอบแรก
ฟังก์ชั่นอาร์เรย์ที่มีประโยชน์
ฟังก์ชัน Ubound(ชื่ออาร์เรย์) ส่งคืนตัวห้อยขององค์ประกอบสุดท้ายของอาร์เรย์
ฟังก์ชัน Lbound (ชื่ออาร์เรย์) ส่งคืนตัวห้อยขององค์ประกอบแรกของอาร์เรย์ ค่าเริ่มต้นคือ 0
การใช้งานเพิ่มเติม:
ฟังก์ชั่นการเรียงลำดับอาร์เรย์
ฟังก์ชั่นการเรียงลำดับ (ary)
KeepChecking = จริง
ทำจนกระทั่ง KeepChecking = FALSE
KeepChecking = FALSE
สำหรับ I = 0 ถึง UBound(ary)
ถ้าฉัน = UBound(ary) ให้ออกจาก For
ถ้า ary(I) > ary(I+1) แล้ว
ค่าแรก = ary(I)
ค่าที่สอง = ary(I+1)
ary(I) = ค่าที่สอง
ary(I+1) = ค่าแรก
KeepChecking = จริง
สิ้นสุดถ้า
ต่อไป
วนซ้ำ
เรียงลำดับ = อารีย์
สิ้นสุดฟังก์ชัน
ตัวอย่างการใช้งานฟังก์ชันการเรียงลำดับอาร์เรย์
DimMyArray
MyArray = อาร์เรย์(1,5,123,12,98)
MyArray = เรียงลำดับ (MyArray)
สำหรับ I = Lbound(MyArray) ถึง Ubound(MyArray)
การตอบสนองเขียน MyArray(I) & <br>
ต่อไป
แยกสตริงและส่งกลับอาร์เรย์
DimMyArray
MyArray = แยก (สตริง, ตัวคั่น)
สำหรับ I = Lbound(MyArray) ถึง Ubound(MyArray)
การตอบสนองเขียน MyArray(I) & <br>
ต่อไป
การใช้อาร์เรย์ในแอปพลิเคชันและเซสชัน
แอปพลิเคชั่นล็อค
แอปพลิเคชัน (StoredArray) = MyArray
แอปพลิเคชั่นปลดล็อค
LocalArray = แอปพลิเคชัน (StoredArray)
เขียนทับอาร์เรย์ในแอปพลิเคชัน
แอปพลิเคชั่นล็อค
แอปพลิเคชัน (StoredArray) = LocalArray
แอปพลิเคชั่นปลดล็อค
การใช้งานเซสชันเหมือนกับแอปพลิเคชัน
นำเข้าข้อมูลจากฐานข้อมูลไปยังอาร์เรย์
DimMyArray
รับบันทึกทั้งหมด
MyArray = RS.GetRows
รับ 10 รายการแรก
MyArray = RS.GetRows(10)
สำหรับแถว = 0 ถึง UBound (MyArray, 2)
สำหรับ col = 0 ถึง UBound (MyArray, 1)
Response.เขียน (col, แถว) & <br>
ต่อไป
ต่อไป
ส่งผ่านอาร์เรย์ไปยังหน้าอื่น
มีหลายวิธีในการส่งอาร์เรย์ไปยังหน้าอื่น เช่น 3 วิธีต่อไปนี้:
1. กำหนดสตริงที่คั่นด้วยเครื่องหมายจุลภาค จากนั้นใช้ฟังก์ชัน Split เพื่อสร้างอาร์เรย์ใหม่ในหน้าถัดไป
2. เก็บอาร์เรย์ไว้ในตัวแปร Session แล้วเรียกใช้ในหน้าถัดไป
3. ส่งผ่านอาร์เรย์ผ่านพื้นที่ที่ซ่อนอยู่ของแบบฟอร์ม โดยจะถูกคั่นด้วยเครื่องหมายจุลภาคโดยอัตโนมัติ จากนั้นใช้ฟังก์ชัน Split เพื่อสร้างอาร์เรย์ใหม่
สองวิธีแรกนั้นดี แต่ทั้งสองวิธีนั้นซับซ้อนกว่าวิธีที่สาม ที่นี่เราจะแนะนำเฉพาะอันที่สามเท่านั้นเพราะมันง่ายที่สุด
ไฟล์ 1.asp:
-
สลัวฉัน
หรี่ myArray (20)
สำหรับ I=0 ถึง 20
myArray(I)=รายการ & I
ต่อไป
-
<html>
<ร่างกาย>
<ชื่อฟอร์ม=วิธีทดสอบแบบฟอร์ม=การกระทำที่โพสต์=2.asp>
-
สำหรับ I=0 ถึง ubound(myArray)
response.write <ประเภทอินพุต=ชื่อที่ซ่อนอยู่=ค่า myArray=' & myArray(I) & '>
ต่อไป
-
<p>
<ประเภทอินพุต=ส่ง>
</แบบฟอร์ม>
</ร่างกาย>
</html>
สิ่งที่เราทำข้างต้นคือการใช้ฟิลด์โดยนัยแยกต่างหากเพื่อจัดเก็บแต่ละองค์ประกอบในอาร์เรย์ในรูปแบบ มาดูหน้าถัดไปกัน:
ไฟล์ 2.asp
<html>
<ร่างกาย>
-
arrString สลัว
หรี่ myArray
สลัวฉัน
arrString=คำขอ(myArray)
myArray = แยก (arrString,,)
สำหรับ I=0 ถึง ubound(myArray)
response.write รายการ &I& = & myArray(I) & <br> & vbCrLf
ต่อไป
-
</ร่างกาย>
</html>