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
- Tworzenie wycinków za pomocą zakresów
- Semantyka indeksów ArraySlice
- Konwertowanie wycinków z powrotem na tablice
- prefix, suffix i dropFirst