# 1 การใช้ตัวArrayห้อยกับช่วง
ด้วย Swift 5 เมื่อคุณเขียน ...
let newNumbers = numbers[0...position]
... newNumbersไม่ได้เป็นชนิดแต่เป็นประเภทArray<Int> ArraySlice<Int>นั่นเป็นเพราะArray's subscript(_:)ส่งกลับArraySlice<Element>ว่าตามที่แอปเปิ้ลนำเสนอมุมมองที่เข้าสู่การจัดเก็บของบางส่วนอาร์เรย์ขนาดใหญ่
นอกจากนี้ Swift ยังมีArrayinitializer ที่เรียกinit(_:)ว่าช่วยให้เราสร้างอาร์เรย์ใหม่จากsequence(รวมถึงArraySlice)
ดังนั้นคุณสามารถใช้subscript(_:)ด้วยinit(_:)เพื่อให้ได้รับอาร์เรย์ใหม่จากครั้งแรกnองค์ประกอบของอาร์เรย์:
let array = Array(10...14) // [10, 11, 12, 13, 14]
let arraySlice = array[0..<3] // using Range
//let arraySlice = array[0...2] // using ClosedRange also works
//let arraySlice = array[..<3] // using PartialRangeUpTo also works
//let arraySlice = array[...2] // using PartialRangeThrough also works
let newArray = Array(arraySlice)
print(newArray) // prints [10, 11, 12]
# 2 ใช้Array's prefix(_:)วิธี
Swift มีprefix(_:)วิธีการสำหรับประเภทที่สอดคล้องกับCollectionโปรโตคอล (รวมถึงArray) prefix(_:)มีคำประกาศดังต่อไปนี้:
func prefix(_ maxLength: Int) -> ArraySlice<Element>
ส่งคืนค่าตามมาโดยมีความยาวสูงสุด maxLength ที่มีองค์ประกอบเริ่มต้น
Apple ยังระบุ:
หากความยาวสูงสุดเกินจำนวนองค์ประกอบในคอลเล็กชันผลลัพธ์จะมีองค์ประกอบทั้งหมดในคอลเล็กชัน
ดังนั้นเพื่อเป็นทางเลือกอื่นจากตัวอย่างก่อนหน้านี้คุณสามารถใช้โค้ดต่อไปนี้เพื่อสร้างอาร์เรย์ใหม่จากองค์ประกอบแรกของอาร์เรย์อื่น:
let array = Array(10...14) // [10, 11, 12, 13, 14]
let arraySlice = array.prefix(3)
let newArray = Array(arraySlice)
print(newArray) // prints [10, 11, 12]