# 1 การใช้ตัวArray
ห้อยกับช่วง
ด้วย Swift 5 เมื่อคุณเขียน ...
let newNumbers = numbers[0...position]
... newNumbers
ไม่ได้เป็นชนิดแต่เป็นประเภทArray<Int>
ArraySlice<Int>
นั่นเป็นเพราะArray
's subscript(_:)
ส่งกลับArraySlice<Element>
ว่าตามที่แอปเปิ้ลนำเสนอมุมมองที่เข้าสู่การจัดเก็บของบางส่วนอาร์เรย์ขนาดใหญ่
นอกจากนี้ Swift ยังมีArray
initializer ที่เรียก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]