🖤 요약
enumerated()와 firstIndex(of:)...은 배열과 같은 콜렉션 타입(링크)에서 인덱스 번호를 찾거나, n번째 인덱스 값을 구하고 싶을 때 사용할 수 있는 메소드이다.
- enumerated() : (인덱스 번호, 인덱스 값) 쌍을 반환
- firstIndex(of:), firstIndex(where:)... : 인덱스 번호를 옵셔널 타입으로 반환
❤️ enumerated()
▶️ 정의
enumerated()는 (인덱스 번호, 인덱스 값) 쌍을 반환하는 인스턴스 메소드이다.
콜렉션.enumerated() 형태로 사용할 수 있다.
▶️ 예제 - feelings
감정들을 담은 'feelings'라는 배열의 index 번호와 값을 출력하는 코드이다.
var feelings = ["happy", "sad", "angry", "sad"]
for (idx, feel) in feelings.enumerated() {
print("\(idx): \(feel)")
}
이 코드가 출력하는 결과는 다음과 같다.
0: happy
1: sad
2: angry
3: sad
enumerated()는 배열(Array) 뿐만 아니라 집합(Set)에도 사용할 수 있다.
var feelSet = Set(["happy", "sad", "angry", "sad"])
for (idx, feel) in feelSet.enumerated() {
print("\(idx): \(feel)")
}
❤️ firstIndex(of:), lastIndex(of:)
▶️ 정의
firstIndex(of:) 또는 lastIndex(of:)는 특정 값이 배열에서 몇 번째 인덱스에 위치해있는지를 찾아주는 메소드이다.
콜렉션.firstIndex(of: 찾는 값) 형식으로 쓸 수 있다. 그러나, 옵셔널 타입으로 반환한다.
▶️ 예제 - feelings
var feelings = ["happy", "sad", "angry", "sad"]
print(feelings.firstIndex(of:"sad")) // Optional(1)
print(feelings.lastIndex(of: "sad")) // Optional(3)
print(feelings.firstIndex(of: "satisfied")) // nil
❤️ firstIndex(where:), lastIndex(where:)
▶️ 정의
콜렉션.firstIndex(where: 조건)
firstIndex(where:) 또는 lastIndex(where:)도 조건을 만족하는 인덱스 번호를 옵셔널 타입으로 반환한다.
그러나 (of:) 보다 좀 더 정교하게 명령할 수 있다.
▶️ 예제 1 - feelings
'feelings' 리스트에서 'sad'의 인덱스 번호를 출력하는 코드이다.
var feelings = ["happy", "sad", "angry", "sad"]
print(feelings.firstIndex(where: { $0 == "sad"})) // Optional(1)
print(feelings.lastIndex(where: { $0 == "sad"})) // Optional(3)
▶️ 예제 2 - struct
파라미터 title, artist와, description() 함수를 가진 'Album' 구조체를 만들었다.
struct Album {
let title: String
let artist: String
func description() -> String {
return "\(title) by \(artist)"
}
}
그리고 컨텐츠를 담은 변수도 선언해주겠다.
var easyOnMe = Album(title: "Easy On Me", artist: "Adele")
var someone = Album(title: "SomeoneLikeYou", artist: "Adele")
var hello = Album(title: "Hello", artist: "Adele")
다음으로, 컨텐츠들을 'songs'라는 리스트로 묶어보겠다.
var songs: [Album] = [easyOnMe, someone, hello]
이제 firstIndex(where:)과 lastIndex(where:)을 사용해보겠다!!
if let index1 = songs.firstIndex(where: { $0.artist == "Adele" }) {
print(songs[index1].title) // Easy On Me
}
if let index2 = songs.lastIndex(where: { $0.artist == "Adele" }) {
print(songs[index2].description()) // Hello by Adele
}
firstIndex(where:)는 Adele의 곡 중 젤 처음에 위치한 "Easy On Me" 를 출력했고,
lastIndex(where:)는 Adele의 곡 중 제일 마지막에 위치한 "Hello"를 출력했다.
🖤 기타 예제
[Swift|코드카타] (프로그래머스) 입문 #24. 서울에서 김서방 찾기 - firstIndex(of:), enumerated()
'Swift > 문법' 카테고리의 다른 글
[Swift|문법] String 문자열 추출하기(자르기) - prefix(_:), suffix(_:), .index(.startIndex, offset:) (0) | 2024.02.21 |
---|---|
[Swift|문법] 클로저(Closure) (1) | 2024.02.19 |
[Swift|문법] vector (0) | 2024.02.18 |
[Swift|문법] 조건문 - combining conditions(&&, ||), ternary operator(삼항 연산자), switch (0) | 2024.02.16 |
[Swift] 연산자 (operator) - arithmetic, overloading, compound, comparison (0) | 2024.02.16 |