[Swift] 배열 index 조회 및 삭제하기
2020. 8. 13. 11:33ㆍiOS/Swift
배열(정확히는 Collection)에서 값을 조회하는 방법을 알아보자.
firstIndex(of:) 는 배열의 앞에서부터 조회해서 첫번째 일치하는 값의 index를 반환한다.
lastIndex(of:) 는 배열의 뒤에서부터 조회해서 첫번째 일치하는 값의 index를 반환한다.
var arr: [String] = ["일번", "이번", "삼번", "사번", "이번", "육번"]
if let firstIndex = arr.firstIndex(of: "이번") {
print(firstIndex) // 1
}
if let lastIndex = arr.lastIndex(of: "이번") {
print(lastIndex) // 4
}
반환된 값은 Int? 이다. (조회했을 때 일치하는 값이 없을 경우가 있기때문에 옵셔널)
받아온 index의 값을 삭제하고 싶다면
if let firstIndex = arr.firstIndex(of: "이번") {
arr.remove(at: firstIndex)
}
// ["일번", "삼번", "사번", "이번", "육번"]
조회하는 다른 방법으로는 firstIndex(where:), lastIndex(where:) 도 있다.
배열을 조회해서 일치하는 값의 index를 반환하는 것은 같다.
그리고 'Equatable'을 준수하거나 그 조건에 맞는 값을 반환한다.
예를 들어, UserInfo라는 모델이 있고, 그것을 모아 둔 userInfo라는 배열이 있다.
struct UserInfo {
let name: String
let phone: String
}
var userInfo: [UserInfo] = [값이 여러개 있다는 가정]
거기서 동명이인이 많은 이 세상에서 리스트에서 "민이" 라는 이름을 가진 첫번째 사람의 휴대폰 번호를 찾고싶다 라면
if let index = userInfo.firstIndex(where: { $0.name == "민이" }) {
print(userInfo[index].phone)
}
리스트에서 "민이"라는 이름을 가진 마지막 사람을 찾고싶으면 lastIndex(where:) 를 사용하면 된다.
만약,
나는 "민이" 라는 이름을 가지고 있는 사람을 다 지워버리고 싶어. 하면
userInfo.removeAll(where: { $0.name == "민이" })
로 해주면 리스트 내에서 "민이"라는 이름을 가진 값은 remove될 것이다.
평소 중복 제거 할때 인덱스 찾아와서 값 삭제했는데 removeAll을 미리 알았더라면 ㅠ..
다시 또 열심히 공부해야겠다.
'iOS > Swift' 카테고리의 다른 글
[Swift] UILabel에서 attributedText를 활용한 들여쓰기와 내어쓰기 (1) | 2021.04.08 |
---|---|
[Swift] Check Appstore receipts validation (1) | 2021.02.19 |
[Swift] mailto와 MFMailComposeViewController (0) | 2020.04.08 |
[Swift] 센트리(Sentry)를 사용해보자! (0) | 2020.04.06 |
[Swift] textField / textView 끝의 공백 없애기 (0) | 2019.03.19 |