Swift Academy · บทเรียน

การแปลงส่วนตัดกลับเป็นอาร์เรย์

สร้างอาร์เรย์อิสระจากส่วนตัด

บทเรียน 3 จาก 413 ขั้นตอน

การแปลงส่วนตัดกลับเป็นอาร์เรย์ เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

slice ไม่ใช่อาร์เรย์

ArraySlice เป็นชนิดข้อมูลที่แตกต่างจาก Array ส่วนติดต่อการใช้งานจำนวนมากต้องการ Array โดยตรง ดังนั้นคุณจึงมักต้องแปลงชนิดข้อมูล

let original = [1, 2, 3, 4, 5]
let slice = original[1..<4]
print(type(of: slice))

Array(slice)

ห่อ slice ด้วยตัวสร้าง Array(...) เพื่อสร้างอาร์เรย์ใหม่ที่เป็นอิสระ มีการคัดลอกองค์ประกอบ และมีดัชนีเริ่มจากศูนย์

let original = [10, 20, 30, 40, 50]
let slice = original[2..<5]
let array = Array(slice)
print(array)
print(type(of: array))

ดัชนีเริ่มใหม่จากศูนย์

หลังการแปลง อาร์เรย์ใหม่จะเริ่มดัชนีจาก 0 ต่างจาก slice ที่เก็บดัชนีของอาร์เรย์หลักไว้

let original = [1, 2, 3, 4, 5]
let slice = original[3..<5]
let copy = Array(slice)
print("slice start:", slice.startIndex)
print("array start:", copy.startIndex)

การแปลงจะคัดลอกพื้นที่จัดเก็บ

การแปลงจะบังคับให้เกิดการคัดลอก อาร์เรย์ใหม่จะไม่ใช้พื้นที่จัดเก็บร่วมกับอาร์เรย์หลักอีกต่อไป ดังนั้นการแก้ไขอาร์เรย์ใหม่จึงไม่ส่งผลต่ออาร์เรย์ต้นฉบับ

let original = [1, 2, 3, 4]
var copy = Array(original[1..<3])
copy[0] = 999
print("original:", original)
print("copy:", copy)

การส่งคืนอาร์เรย์จากฟังก์ชัน

เมื่อฟังก์ชันส่งคืนบางส่วนของอาร์เรย์ ให้แปลง slice เพื่อให้ผู้เรียกได้รับ Array ปกติ

func firstThree(of nums: [Int]) -> [Int] {
    return Array(nums.prefix(3))
}
print(firstThree(of: [9, 8, 7, 6, 5]))

การส่งค่าไปยังพารามิเตอร์อาร์เรย์

หากพารามิเตอร์ของส่วนติดต่อการใช้งานมีชนิดเป็น [Int] คุณต้องแปลง slice ก่อนส่งค่าไปให้

func total(_ values: [Int]) -> Int {
    return values.reduce(0, +)
}
let data = [1, 2, 3, 4, 5]
let result = total(Array(data[1..<4]))
print(result)

เมื่อไม่จำเป็นต้องแปลง

หากฟังก์ชันของคุณรับ Sequence หรือ Collection แบบทั่วไป คุณสามารถส่งส่วนย่อยเข้าไปได้โดยตรงโดยไม่ต้องแปลง

func describe<S: Sequence>(_ s: S) where S.Element == Int {
    print(Array(s))
}
let arr = [2, 4, 6, 8]
describe(arr[1..<3])

การแลกเปลี่ยนด้านหน่วยความจำ

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

let huge = Array(1...1000)
let keep = Array(huge[0..<3]) // small independent copy
print(keep)

การแปลงเป็น Set

คุณยังสามารถส่งส่วนย่อยให้ตัวสร้างคอลเลกชันอื่น ๆ เช่น Set ได้ด้วย

let arr = [1, 2, 2, 3, 3, 3]
let uniqueTail = Set(arr[2..<6])
print(uniqueTail.sorted())

การแปลงไปกลับ

การตัดเป็นส่วนย่อย แล้วแปลง จากนั้นตัดเป็นส่วนย่อยอีกครั้งนั้นทำได้อย่างสมบูรณ์ การแปลงแต่ละครั้งชัดเจนและคาดเดาได้

let arr = [10, 20, 30, 40, 50]
let a = Array(arr[1..<4])
let b = Array(a[0..<2])
print(a)
print(b)

แนวทางปฏิบัติที่ดี

ให้ทำงานกับส่วนย่อยระหว่างการคำนวณ และแปลงเป็น Array เฉพาะตรงขอบเขตที่คุณจัดเก็บหรือส่งคืนผลลัพธ์

let arr = [3, 1, 4, 1, 5, 9, 2]
let top3 = Array(arr.sorted(by: >)[0..<3])
print(top3)

ตรวจสอบความเข้าใจ

ทดสอบการแปลงส่วนย่อย

สรุปทบทวน

ใช้ Array(slice) เพื่อเปลี่ยน ArraySlice ให้เป็นอาร์เรย์อิสระที่มีดัชนีเริ่มจากศูนย์และพื้นที่จัดเก็บที่คัดลอกมา ให้แปลงตรงขอบเขตของส่วนติดต่อโปรแกรม และใช้ส่วนย่อยระหว่างการคำนวณเพื่อหลีกเลี่ยงการคัดลอกเพิ่มเติม

let s = [1, 2, 3, 4, 5][2..<5]
let a = Array(s)
print(a, a.startIndex)
เริ่มต้นได้ฟรี

เรียนรู้ Swift ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
122
บทเรียน
409

คำถามที่พบบ่อย

บทเรียน “การแปลงส่วนตัดกลับเป็นอาร์เรย์” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การแปลงส่วนตัดกลับเป็นอาร์เรย์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การแปลงส่วนตัดกลับเป็นอาร์เรย์”

สร้างอาร์เรย์อิสระจากส่วนตัด คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การแปลงส่วนตัดกลับเป็นอาร์เรย์” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม

ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การสร้างส่วนตัดด้วยช่วงค่า
  2. ความหมายของดัชนีใน ArraySlice
  3. การแปลงส่วนตัดกลับเป็นอาร์เรย์
  4. prefix, suffix และ dropFirst
← กลับไปที่ Swift Academy