F # - อาร์เรย์

อาร์เรย์เป็นคอลเลกชันที่มีขนาดคงที่ฐานเป็นศูนย์และไม่สามารถเปลี่ยนแปลงได้ขององค์ประกอบข้อมูลที่ต่อเนื่องกันซึ่งเป็นชนิดเดียวกันทั้งหมด

การสร้างอาร์เรย์

คุณสามารถสร้างอาร์เรย์โดยใช้ไวยากรณ์และวิธีการต่างๆหรือโดยใช้ฟังก์ชันจากโมดูลอาร์เรย์ ในส่วนนี้เราจะพูดถึงการสร้างอาร์เรย์โดยไม่ใช้ฟังก์ชันโมดูล

มีสามวิธีในการสร้างอาร์เรย์โดยไม่ใช้ฟังก์ชันเชิงไวยากรณ์ -

  • โดยแสดงรายการค่าที่ต่อเนื่องกันระหว่าง [| และ |] และคั่นด้วยอัฒภาค
  • โดยการวางแต่ละองค์ประกอบในบรรทัดแยกกันซึ่งในกรณีนี้ตัวคั่นอัฒภาคเป็นทางเลือก
  • โดยใช้นิพจน์ลำดับ.

คุณสามารถเข้าถึงองค์ประกอบอาร์เรย์โดยใช้ตัวดำเนินการจุด (.) และวงเล็บ ([และ])

ตัวอย่างต่อไปนี้สาธิตการสร้างอาร์เรย์ -

//using semicolon separator
let array1 = [| 1; 2; 3; 4; 5; 6 |]
for i in 0 .. array1.Length - 1 do
   printf "%d " array1.[i]
printfn" "

// without semicolon separator
let array2 =
   [|
      1
      2
      3
      4
      5
   |]
for i in 0 .. array2.Length - 1 do
   printf "%d " array2.[i]
printfn" "

//using sequence
let array3 = [| for i in 1 .. 10 -> i * i |]
for i in 0 .. array3.Length - 1 do
   printf "%d " array3.[i]
printfn" "

เมื่อคุณคอมไพล์และรันโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

1 2 3 4 5 6
1 2 3 4 5
1 4 9 16 25 36 49 64 81 100

การทำงานพื้นฐานบนอาร์เรย์

โมดูลไลบรารี Microsoft.FSharp.Collections.Array สนับสนุนการดำเนินการกับอาร์เรย์หนึ่งมิติ

ตารางต่อไปนี้แสดงการทำงานพื้นฐานบน Arrays -

ค่า คำอธิบาย
ต่อท้าย: 'T [] →' T [] → 'T [] สร้างอาร์เรย์ที่มีองค์ประกอบของอาร์เรย์หนึ่งตามด้วยองค์ประกอบของอาร์เรย์อื่น
ค่าเฉลี่ย: ^ T [] → ^ T ส่งคืนค่าเฉลี่ยขององค์ประกอบในอาร์เรย์
เฉลี่ยโดย: ('T → ^ U) →' T [] → ^ U ส่งกลับค่าเฉลี่ยขององค์ประกอบที่สร้างขึ้นโดยใช้ฟังก์ชันกับแต่ละองค์ประกอบของอาร์เรย์
blit: 'T [] → int →' T [] → int → int →หน่วย อ่านช่วงขององค์ประกอบจากอาร์เรย์หนึ่งและเขียนลงในอีกรายการหนึ่ง
เลือก: (ตัวเลือก 'T → U) →' T [] → 'U [] ใช้ฟังก์ชันที่ให้มากับแต่ละองค์ประกอบของอาร์เรย์ ส่งคืนอาร์เรย์ที่มีผลลัพธ์ x สำหรับแต่ละองค์ประกอบที่ฟังก์ชันส่งคืนค่า Some (x)
รวบรวม: ('T →' U []) → T [] → 'U [] ใช้ฟังก์ชันที่ให้มากับแต่ละองค์ประกอบของอาร์เรย์เชื่อมต่อผลลัพธ์และส่งคืนอาร์เรย์รวม
concat: seq <'T []> →' T [] สร้างอาร์เรย์ที่มีองค์ประกอบของแต่ละลำดับของอาร์เรย์ที่ให้มา
สำเนา: 'T →' T [] สร้างอาร์เรย์ที่มีองค์ประกอบของอาร์เรย์ที่ให้มา
สร้าง: int → 'T →' T [] สร้างอาร์เรย์ที่องค์ประกอบทั้งหมดเป็นค่าที่ระบุในตอนแรก
ว่างเปล่า: 'T [] ส่งคืนอาร์เรย์ว่างของประเภทที่กำหนด
มีอยู่: ('T → bool) →' T [] → bool ทดสอบว่าองค์ประกอบใด ๆ ของอาร์เรย์ตรงตามเพรดิเคตที่ให้มาหรือไม่
มีอยู่ 2: ('T1 →' T2 →บูล) → 'T1 [] →' T2 [] →บูล ทดสอบว่าคู่ขององค์ประกอบที่สอดคล้องกันของสองอาร์เรย์เป็นไปตามเงื่อนไขที่ให้มาหรือไม่
เติม: 'T [] → int → int →' T →หน่วย เติมช่วงขององค์ประกอบของอาร์เรย์ด้วยค่าที่ให้มา
ตัวกรอง: ('T → bool) →' T [] → 'T [] ส่งคืนคอลเล็กชันที่มีเฉพาะองค์ประกอบของอาร์เรย์ที่ให้มาซึ่งเงื่อนไขที่ให้มาจะส่งกลับ true.
ค้นหา: ('T → bool) →' T [] → 'T ส่งคืนองค์ประกอบแรกที่ฟังก์ชันที่ให้มาส่งกลับ true. เพิ่ม KeyNotFoundException หากไม่มีองค์ประกอบดังกล่าว
findIndex: ('T → bool) →' T [] → int ส่งคืนดัชนีขององค์ประกอบแรกในอาร์เรย์ที่ตรงตามเงื่อนไขที่ระบุ เพิ่ม KeyNotFoundException หากไม่มีองค์ประกอบใดที่ตรงตามเงื่อนไข
พับ: ('รัฐ→' ​​T → 'รัฐ) →' รัฐ→ 'T [] →' รัฐ ใช้ฟังก์ชันกับแต่ละองค์ประกอบของอาร์เรย์โดยทำเธรดอาร์กิวเมนต์ตัวสะสมผ่านการคำนวณ ถ้าฟังก์ชันอินพุตคือ f และองค์ประกอบอาร์เรย์คือ i0 ... iN ฟังก์ชันนี้จะคำนวณ f (... (fs i0) ... ) iN
fold2: ('รัฐ→' ​​T1 → 'T2 →' รัฐ) → 'รัฐ→' ​​T1 [] → 'T2 [] →' รัฐ ใช้ฟังก์ชันกับคู่ขององค์ประกอบจากอาร์เรย์ที่ให้มาสองอาร์เรย์ซ้ายไปขวาเธรดอาร์กิวเมนต์ตัวสะสมผ่านการคำนวณ อาร์เรย์อินพุตทั้งสองต้องมีความยาวเท่ากัน มิฉะนั้น ArgumentException จะถูกยกขึ้น
foldBack: ('T →' State → 'State) →' T [] → 'State →' State ใช้ฟังก์ชันกับแต่ละองค์ประกอบของอาร์เรย์โดยทำเธรดอาร์กิวเมนต์ตัวสะสมผ่านการคำนวณ ถ้าฟังก์ชันอินพุตคือ f และองค์ประกอบอาร์เรย์คือ i0 ... iN ฟังก์ชันนี้จะคำนวณ f i0 (... (f iN s))
foldBack2: ('T1 →' T2 → 'รัฐ→' ​​รัฐ) → 'T1 [] →' T2 [] → 'รัฐ→' ​​รัฐ ใช้ฟังก์ชันกับคู่ขององค์ประกอบจากอาร์เรย์ที่ให้มาสองอาร์เรย์จากขวาไปซ้ายโดยทำเกลียวอาร์กิวเมนต์ตัวสะสมผ่านการคำนวณ อาร์เรย์อินพุตทั้งสองต้องมีความยาวเท่ากัน มิฉะนั้น ArgumentException จะถูกยกขึ้น
สำหรับ: ('T → bool) →' T [] → bool ทดสอบว่าองค์ประกอบทั้งหมดของอาร์เรย์เป็นไปตามเงื่อนไขที่ให้มาหรือไม่
forall2: ('T1 →' T2 →บูล) → 'T1 [] →' T2 [] →บูล ทดสอบว่าองค์ประกอบที่เกี่ยวข้องทั้งหมดของสองอาร์เรย์ที่ให้มานั้นตรงตามเงื่อนไขที่ให้มาหรือไม่
รับ: 'T [] → int →' T รับองค์ประกอบจากอาร์เรย์
เริ่มต้น: int → (int → 'T) →' T [] ใช้ฟังก์ชันที่ให้มาเพื่อสร้างอาร์เรย์ของมิติข้อมูลที่ให้มา
isEmpty: 'T [] →บูล ทดสอบว่าอาร์เรย์มีองค์ประกอบหรือไม่
iter: ('T →หน่วย) →' T [] →หน่วย ใช้ฟังก์ชันที่ให้มากับแต่ละองค์ประกอบของอาร์เรย์
iter2: ('T1 →' T2 →หน่วย) → 'T1 [] →' T2 [] →หน่วย) ใช้ฟังก์ชันที่ให้มากับคู่ขององค์ประกอบจากดัชนีที่ตรงกันในสองอาร์เรย์ อาร์เรย์ทั้งสองต้องมีความยาวเท่ากัน มิฉะนั้น ArgumentException จะถูกยกขึ้น
iteri: (int → 'T →หน่วย) →' T [] →หน่วย ใช้ฟังก์ชันที่ให้มากับแต่ละองค์ประกอบของอาร์เรย์ จำนวนเต็มที่ส่งผ่านไปยังฟังก์ชันบ่งชี้ดัชนีขององค์ประกอบ
iteri2: (int → 'T1 →' T2 → unit) → 'T1 [] →' T2 [] →หน่วย ใช้ฟังก์ชันที่ให้มากับคู่ขององค์ประกอบจากดัชนีที่ตรงกันในสองอาร์เรย์และส่งผ่านดัชนีขององค์ประกอบด้วย อาร์เรย์ทั้งสองต้องมีความยาวเท่ากัน มิฉะนั้น ArgumentException จะถูกยกขึ้น
ความยาว: 'T [] → int ส่งกลับความยาวของอาร์เรย์ คุณสมบัติ Length ทำสิ่งเดียวกัน
แผนที่: ('T →' U) → 'T [] →' U [] สร้างอาร์เรย์ที่มีองค์ประกอบเป็นผลลัพธ์ของการใช้ฟังก์ชันที่ให้มากับแต่ละองค์ประกอบของอาร์เรย์ที่ให้มา
แผนที่ 2: ('T1 →' T2 → 'U) →' T1 [] → 'T2 [] →' U [] สร้างอาร์เรย์ที่มีองค์ประกอบเป็นผลลัพธ์ของการใช้ฟังก์ชันที่ให้มากับองค์ประกอบที่สอดคล้องกันของอาร์เรย์ที่ให้มาสองชุด อาร์เรย์อินพุตทั้งสองต้องมีความยาวเท่ากัน มิฉะนั้น ArgumentException จะถูกยกขึ้น
แผนที่: (int → 'T →' U) → 'T [] →' U [] สร้างอาร์เรย์ที่มีองค์ประกอบเป็นผลลัพธ์ของการใช้ฟังก์ชันที่ให้มากับแต่ละองค์ประกอบของอาร์เรย์ที่ให้มา ดัชนีจำนวนเต็มที่ส่งผ่านไปยังฟังก์ชันบ่งชี้ดัชนีขององค์ประกอบที่กำลังเปลี่ยนรูป
mapi2: (int → 'T1 →' T2 → 'U) →' T1 [] → 'T2 [] →' U [] สร้างอาร์เรย์ที่มีองค์ประกอบเป็นผลลัพธ์ของการใช้ฟังก์ชันที่ให้มากับองค์ประกอบที่สอดคล้องกันของสองคอลเลกชันแบบคู่และส่งผ่านดัชนีขององค์ประกอบ อาร์เรย์อินพุตทั้งสองต้องมีความยาวเท่ากัน มิฉะนั้น ArgumentException จะถูกยกขึ้น
สูงสุด: 'T [] →' T ส่งคืนองค์ประกอบที่ใหญ่ที่สุดของอาร์เรย์ทั้งหมด Operators.max ใช้เพื่อเปรียบเทียบองค์ประกอบ
maxBy: ('T →' U) → 'T [] →' T ส่งคืนองค์ประกอบที่ใหญ่ที่สุดของอาร์เรย์ทั้งหมดโดยเปรียบเทียบผ่าน Operators.max ในผลลัพธ์ของฟังก์ชัน
นาที: ('T [] →' T ส่งคืนองค์ประกอบที่เล็กที่สุดของอาร์เรย์ทั้งหมด Operators.min ใช้เพื่อเปรียบเทียบองค์ประกอบ
นาทีโดย: ('T →' U) → 'T [] →' T ส่งคืนองค์ประกอบที่เล็กที่สุดของอาร์เรย์ทั้งหมด Operators.min ใช้เพื่อเปรียบเทียบองค์ประกอบ
ofList: 'T list →' T [] สร้างอาร์เรย์จากรายการที่ให้มา
ofSeq: seq <'T> →' T [] สร้างอาร์เรย์จากอ็อบเจ็กต์ที่ระบุได้ที่ให้มา
พาร์ติชัน: ('T → bool) →' T [] → 'T [] *' T [] แบ่งอาร์เรย์ออกเป็นสองอาร์เรย์โดยหนึ่งมีองค์ประกอบที่เงื่อนไขที่ให้มาส่งกลับ true, และอื่น ๆ ที่มีสิ่งที่ส่งคืน false.
อนุญาต: (int → int) → 'T [] →' T [] อนุญาตองค์ประกอบของอาร์เรย์ตามการเปลี่ยนแปลงที่ระบุ
เลือก: ('T →' ตัวเลือก U) → 'T [] →' U ใช้ฟังก์ชันที่ให้มากับองค์ประกอบต่อเนื่องของอาร์เรย์ที่ให้มาโดยส่งคืนผลลัพธ์แรกโดยที่ฟังก์ชันส่งคืนค่า Some (x) สำหรับบาง x ถ้าฟังก์ชันไม่คืนค่า Some (x) KeyNotFoundException จะถูกยกขึ้น
ลด: ('T →' T → 'T) →' T [] → 'T ใช้ฟังก์ชันกับแต่ละองค์ประกอบของอาร์เรย์โดยทำเธรดอาร์กิวเมนต์ตัวสะสมผ่านการคำนวณ ถ้าฟังก์ชันอินพุตคือ f และองค์ประกอบอาร์เรย์คือ i0 ... iN ฟังก์ชันนี้จะคำนวณ f (... (f i0 i1) ... ) iN ถ้าอาร์เรย์มีขนาดเป็นศูนย์ ArgumentException จะถูกยกขึ้น
ลดแบ็ค: ('T →' T → 'T) →' T [] → 'T ใช้ฟังก์ชันกับแต่ละองค์ประกอบของอาร์เรย์โดยทำเธรดอาร์กิวเมนต์ตัวสะสมผ่านการคำนวณ หากฟังก์ชันอินพุตเป็น f และองค์ประกอบคือ i0 ... iN ฟังก์ชันนี้จะคำนวณ f i0 (... (f iN-1 iN)) ถ้าอาร์เรย์มีขนาดเป็นศูนย์ ArgumentException จะถูกยกขึ้น
rev: 'T [] →' T [] กลับลำดับขององค์ประกอบในอาร์เรย์ที่ให้มา
สแกน: ('State →' T → 'State) →' State → 'T [] →' State []) ทำตัวเหมือนพับ แต่ส่งคืนผลลัพธ์ระดับกลางพร้อมกับผลลัพธ์สุดท้าย
scanBack: ('T →' รัฐ→ 'รัฐ) →' T [] → 'รัฐ→' ​​รัฐ [] ทำงานเหมือน foldBack แต่ส่งคืนผลลัพธ์ตัวกลางพร้อมกับผลลัพธ์สุดท้าย
ตั้งค่า: 'T [] → int →' T →หน่วย ตั้งค่าองค์ประกอบของอาร์เรย์
จัดเรียง: 'T [] →' T [] จัดเรียงองค์ประกอบของอาร์เรย์และส่งคืนอาร์เรย์ใหม่ Operators.compare ใช้เพื่อเปรียบเทียบองค์ประกอบ
sortBy: ('T →' คีย์) → 'T [] →' T [] จัดเรียงองค์ประกอบของอาร์เรย์โดยใช้ฟังก์ชันที่ให้มาเพื่อแปลงองค์ประกอบเป็นประเภทที่ใช้การดำเนินการจัดเรียงและส่งกลับอาร์เรย์ใหม่ Operators.compare ใช้เพื่อเปรียบเทียบองค์ประกอบ
sortInPlace: 'T [] →หน่วย จัดเรียงองค์ประกอบของอาร์เรย์โดยการเปลี่ยนอาร์เรย์ในตำแหน่งโดยใช้ฟังก์ชันเปรียบเทียบที่ให้มา Operators.compare ใช้เพื่อเปรียบเทียบองค์ประกอบ
sortInPlaceBy: ('T →' คีย์) → 'T [] →หน่วย จัดเรียงองค์ประกอบของอาร์เรย์โดยการเปลี่ยนอาร์เรย์ในตำแหน่งโดยใช้การฉายภาพที่ให้มาสำหรับคีย์ Operators.compare ใช้เพื่อเปรียบเทียบองค์ประกอบ
sortInPlaceWith: ('T →' T → int) → 'T [] →หน่วย จัดเรียงองค์ประกอบของอาร์เรย์โดยใช้ฟังก์ชันการเปรียบเทียบที่ให้มาเพื่อเปลี่ยนอาร์เรย์ในตำแหน่ง
เรียงลำดับด้วย: ('T →' T → int) → 'T [] →' T [] จัดเรียงองค์ประกอบของอาร์เรย์โดยใช้ฟังก์ชันการเปรียบเทียบที่ให้มาและส่งคืนอาร์เรย์ใหม่
ย่อย: 'T [] → int → int →' T [] สร้างอาร์เรย์ที่มีช่วงย่อยที่ให้มาซึ่งระบุโดยดัชนีเริ่มต้นและความยาว
ผลรวม: 'T [] → ^ T ส่งคืนผลรวมขององค์ประกอบในอาร์เรย์
sumBy: ('T → ^ U) →' T [] → ^ U ส่งกลับผลรวมของผลลัพธ์ที่สร้างขึ้นโดยใช้ฟังก์ชันกับแต่ละองค์ประกอบของอาร์เรย์
toList: รายการ 'T [] →' T แปลงอาร์เรย์ที่ให้มาเป็นรายการ
toSeq: 'T [] → seq <' T> ดูอาร์เรย์ที่ให้มาเป็นลำดับ
tryFind: ('T → bool) →' T [] → 'ตัวเลือก T ส่งคืนองค์ประกอบแรกในอาร์เรย์ที่ให้มาซึ่งฟังก์ชันที่ให้มาจะส่งกลับ true. ผลตอบแทนNone หากไม่มีองค์ประกอบดังกล่าว
tryFindIndex: ('T → bool) →' T [] →ตัวเลือก int ส่งคืนดัชนีขององค์ประกอบแรกในอาร์เรย์ที่ตรงตามเงื่อนไขที่ระบุ
tryPick: ('T →' ตัวเลือก U) → 'T [] →' ตัวเลือก U ใช้ฟังก์ชันที่ให้มากับองค์ประกอบต่อเนื่องของอาร์เรย์ที่ให้มาและส่งกลับผลลัพธ์แรกโดยที่ฟังก์ชันส่งคืนค่า Some (x) สำหรับบาง x ถ้าฟังก์ชันไม่คืนค่า Some (x)None จะถูกส่งกลับ
เปิดเครื่องรูด: ('T1 *' T2) [] → 'T1 [] *' T2 [] แบ่งอาร์เรย์ของคู่ทูเพิลเป็นทูเพิลสองอาร์เรย์
unzip3: ('T1 *' T2 * 'T3) [] →' T1 [] * 'T2 [] *' T3 [] แยกอาร์เรย์ของทูเปิลของสามองค์ประกอบออกเป็นทูเพิลจากสามอาร์เรย์
zeroCreate: int → 'T [] สร้างอาร์เรย์ที่องค์ประกอบเริ่มต้นถูกตั้งค่าเป็นค่าเริ่มต้น Unchecked.defaultof <'T>
ซิป: 'T1 [] →' T2 [] → ('T1 *' T2) [] รวมอาร์เรย์สองอาร์เรย์เข้ากับอาร์เรย์ของทูเปิลที่มีสององค์ประกอบ อาร์เรย์ทั้งสองต้องมีความยาวเท่ากัน มิฉะนั้น ArgumentException จะถูกยกขึ้น
zip3: 'T1 [] →' T2 [] → 'T3 [] → (' T1 * 'T2 * 113' T3) [] รวมอาร์เรย์สามอาร์เรย์เข้ากับอาร์เรย์ของสิ่งที่มีสามองค์ประกอบ อาร์เรย์ทั้งสามต้องมีความยาวเท่ากัน มิฉะนั้น ArgumentException จะถูกยกขึ้น

ในส่วนต่อไปนี้เราจะเห็นการใช้ฟังก์ชันเหล่านี้บางส่วน

การสร้างอาร์เรย์โดยใช้ฟังก์ชัน

โมดูล Array มีฟังก์ชันมากมายที่สร้างอาร์เรย์ตั้งแต่เริ่มต้น

  • Array.empty ฟังก์ชันสร้างอาร์เรย์ว่างใหม่

  • Array.create ฟังก์ชันสร้างอาร์เรย์ขนาดที่ระบุและตั้งค่าองค์ประกอบทั้งหมดเป็นค่าที่กำหนด

  • Array.init ฟังก์ชันสร้างอาร์เรย์กำหนดมิติข้อมูลและฟังก์ชันในการสร้างองค์ประกอบ

  • Array.zeroCreate ฟังก์ชันจะสร้างอาร์เรย์ซึ่งองค์ประกอบทั้งหมดจะเริ่มต้นเป็นค่าศูนย์

  • Array.copy ฟังก์ชันสร้างอาร์เรย์ใหม่ที่มีองค์ประกอบที่คัดลอกมาจากอาร์เรย์ที่มีอยู่

  • Array.sub ฟังก์ชันสร้างอาร์เรย์ใหม่จากช่วงย่อยของอาร์เรย์

  • Array.append ฟังก์ชันสร้างอาร์เรย์ใหม่โดยการรวมอาร์เรย์ที่มีอยู่สองอาร์เรย์

  • Array.choose ฟังก์ชันเลือกองค์ประกอบของอาร์เรย์เพื่อรวมไว้ในอาร์เรย์ใหม่

  • Array.collect ฟังก์ชันเรียกใช้ฟังก์ชันที่ระบุบนองค์ประกอบอาร์เรย์แต่ละรายการของอาร์เรย์ที่มีอยู่แล้วรวบรวมองค์ประกอบที่สร้างโดยฟังก์ชันและรวมเข้ากับอาร์เรย์ใหม่

  • Array.concat ฟังก์ชันใช้ลำดับของอาร์เรย์และรวมไว้ในอาร์เรย์เดียว

  • Array.filter ฟังก์ชันรับฟังก์ชันเงื่อนไขบูลีนและสร้างอาร์เรย์ใหม่ที่มีเฉพาะองค์ประกอบเหล่านั้นจากอาร์เรย์อินพุตที่เงื่อนไขเป็นจริง

  • Array.rev ฟังก์ชันสร้างอาร์เรย์ใหม่โดยการย้อนกลับลำดับของอาร์เรย์ที่มีอยู่

ตัวอย่างต่อไปนี้แสดงให้เห็นถึงฟังก์ชันเหล่านี้ -

ตัวอย่าง 1

(* using create and set *)
let array1 = Array.create 10 ""
for i in 0 .. array1.Length - 1 do
   Array.set array1 i (i.ToString())
for i in 0 .. array1.Length - 1 do
   printf "%s " (Array.get array1 i)
printfn " "

(* empty array *)
let array2 = Array.empty
printfn "Length of empty array: %d" array2.Length

let array3 = Array.create 10 7.0
printfn "Float Array: %A" array3

(* using the init and zeroCreate *)
let array4 = Array.init 10 (fun index -> index * index)
printfn "Array of squares: %A" array4

let array5 : float array = Array.zeroCreate 10
let (myZeroArray : float array) = Array.zeroCreate 10
printfn "Float Array: %A" array5

เมื่อคุณคอมไพล์และรันโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

0 1 2 3 4 5 6 7 8 9
Length of empty array: 0
Float Array: [|7.0; 7.0; 7.0; 7.0; 7.0; 7.0; 7.0; 7.0; 7.0; 7.0|]
Array of squares: [|0; 1; 4; 9; 16; 25; 36; 49; 64; 81|]
Float Array: [|0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0|]

ตัวอย่าง 2

(* creating subarray from element 5 *)
(* containing 15 elements thereon *)

let array1 = [| 0 .. 50 |]
let array2 = Array.sub array1 5 15
printfn "Sub Array:"
printfn "%A" array2

(* appending two arrays *)
let array3 = [| 1; 2; 3; 4|]
let array4 = [| 5 .. 9 |]
printfn "Appended Array:"
let array5 = Array.append array3 array4
printfn "%A" array5

(* using the Choose function *)
let array6 = [| 1 .. 20 |]
let array7 = Array.choose (fun elem -> if elem % 3 = 0 then
   Some(float (elem))
      else
   None) array6

printfn "Array with Chosen elements:"
printfn "%A" array7

(*using the Collect function *)
let array8 = [| 2 .. 5 |]
let array9 = Array.collect (fun elem -> [| 0 .. elem - 1 |]) array8
printfn "Array with collected elements:"
printfn "%A" array9

เมื่อคุณคอมไพล์และรันโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

Sub Array:
[|5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19|]
Appended Array:
[|1; 2; 3; 4; 5; 6; 7; 8; 9|]
Array with Chosen elements:
[|3.0; 6.0; 9.0; 12.0; 15.0; 18.0|]
Array with collected elements:
[|0; 1; 0; 1; 2; 0; 1; 2; 3; 0; 1; 2; 3; 4|]

กำลังค้นหาอาร์เรย์

Array.find ฟังก์ชันรับฟังก์ชันบูลีนและส่งกลับองค์ประกอบแรกที่ฟังก์ชันส่งคืนจริงมิฉะนั้นจะเพิ่ม KeyNotFoundException

Array.findIndex ฟังก์ชันจะทำงานในทำนองเดียวกันยกเว้นว่าจะส่งกลับดัชนีขององค์ประกอบแทนที่จะเป็นองค์ประกอบเอง

ตัวอย่างต่อไปนี้แสดงให้เห็นถึงสิ่งนี้

Microsoft นำเสนอตัวอย่างโปรแกรมที่น่าสนใจซึ่งพบองค์ประกอบแรกในช่วงของจำนวนที่กำหนดซึ่งเป็นทั้งกำลังสองที่สมบูรณ์แบบและลูกบาศก์ที่สมบูรณ์แบบ -

let array1 = [| 2 .. 100 |]
let delta = 1.0e-10
let isPerfectSquare (x:int) =
   let y = sqrt (float x)
   abs(y - round y) < delta

let isPerfectCube (x:int) =
   let y = System.Math.Pow(float x, 1.0/3.0)
   abs(y - round y) < delta

let element = Array.find (fun elem -> isPerfectSquare elem && isPerfectCube elem) array1

let index = Array.findIndex (fun elem -> isPerfectSquare elem && isPerfectCube elem) array1

printfn "The first element that is both a square and a cube is %d and its index is %d." element index

เมื่อคุณคอมไพล์และรันโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

The first element that is both a square and a cube is 64 and its index is 62.