0Pricing
Swift Academy · Lekcja

Konwertowanie wycinków z powrotem na tablice

Materializowanie wycinka jako samodzielnej tablicy.

Konwertowanie wycinków z powrotem na tablice to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.

Wycinki nie są tablicami

ArraySlice jest odrębnym typem od Array. Wiele interfejsów API wymaga konkretnego typu Array, dlatego często trzeba wykonać konwersję.

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

Array(slice)

Wycięcie należy opakować w inicjalizator Array(...), aby utworzyć nową, niezależną tablicę ze skopiowanymi elementami i indeksami rozpoczynającymi się od zera.

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

Indeksy są ponownie liczone od zera

Po konwersji nowa tablica rozpoczyna indeksowanie od 0, w przeciwieństwie do wycinka, który zachowywał indeksy tablicy nadrzędnej.

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)

Konwersja kopiuje pamięć

Konwersja wymusza kopiowanie. Nowa tablica nie współdzieli już pamięci z nadrzędną, dlatego jej modyfikowanie nie wpływa na oryginał.

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

Zwracanie tablic z funkcji

Gdy funkcja zwraca fragment tablicy, należy przekonwertować wycinek, aby wywołujący otrzymał zwykły typ Array.

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

Przekazywanie do parametrów typu Array

Jeśli parametr interfejsu API ma typ [Int], przed przekazaniem wycinka należy go przekonwertować.

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)

Kiedy konwersja jest niepotrzebna

Jeśli Państwa funkcja przyjmuje ogólny typ Sequence lub Collection, można przekazać wycinek bezpośrednio, bez konwersji.

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

Kompromis dotyczący pamięci

Wycinki unikają kopiowania i utrzymują pamięć nadrzędnej tablicy. Jeśli przez długi czas przechowują Państwo mały wycinek ogromnej tablicy, należy przekonwertować go na tablicę, aby można było zwolnić duży bufor.

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

Konwersja na Set

Wycinek można również przekazać do innych inicjalizatorów kolekcji, takich jak Set.

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

Konwersja tam i z powrotem

Najpierw utworzenie wycinka, następnie jego konwersja i ponowne utworzenie wycinka jest całkowicie poprawne. Każda konwersja jest jawna i przewidywalna.

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

Dobra praktyka

Podczas obliczeń należy nadal pracować z wycinkami, a na Array konwertować je dopiero na granicy, w której wynik jest przechowywany lub zwracany.

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

Szybkie sprawdzenie

Przetestuj konwersję wycinka.

Podsumowanie

Użyj Array(slice), aby przekształcić ArraySlice w niezależną tablicę z indeksami zaczynającymi się od zera i skopiowaną pamięcią. Konwertuj wycinki na granicach API, a podczas obliczeń zachowuj je, aby uniknąć dodatkowych kopii.

let s = [1, 2, 3, 4, 5][2..<5]
let a = Array(s)
print(a, a.startIndex)

Często zadawane pytania

Czy lekcja „Konwertowanie wycinków z powrotem na tablice” jest bezpłatna?

Tak — pełny tekst „Konwertowanie wycinków z powrotem na tablice” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Konwertowanie wycinków z powrotem na tablice”?

Materializowanie wycinka jako samodzielnej tablicy. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Konwertowanie wycinków z powrotem na tablice”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?

Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Tworzenie wycinków za pomocą zakresów
  2. Semantyka indeksów ArraySlice
  3. Konwertowanie wycinków z powrotem na tablice
  4. prefix, suffix i dropFirst
← Powrót do Swift Academy