공부하다가 스위프트의 배열과 문자열은 파이썬과 달라서 정리해 봅니다.
주의할 점 위주로 정리해 봤습니다.
스위프트에서 문자열을 배열로 바꾸는 법
여러가지가 있으니 코드로 소개해 드리겠습니다.
열거형:
let str = "ABC"
var arr = [Character]()
for i in str {
arr.append(i)
}
print(arr)
// ["A", "B", "C"]
Array생성자로 직접 변환하기:
let str = "ABC"
let arr = Array(str)
print(arr)
// ["A", "B", "C"]
map 이용하기:
let str = "ABC".map { (n: Character) -> Character in
return n
}
let str = "ABC".map { $0 }
// ["A", "B", "C"]
+) 스위프트는 정말 엄밀한 언어이기 때문에... 문자열과 캐릭터형을 구분해야합니다.
var n = 123
let digits = String(n).map { $0 }
print(type(of:digits[0])) // Character
str에서 하나의 값(ex) digits[0])은 파이썬에선 str이지만 스위프트에서는 케릭터입니다.
즉 위의 코드로 digits를 출력해보면 ["1", "2", "3"]이 나오는데
각각은 케틱터 타입을 갖습니다.
이것을 정수 배열 [1, 2, 3]으로 바꾸려면
var n = 123
let digits = String(n).map { Int(String($0))! }
print(digits)
요렇게 스트링으로 바꿔줬다가 다시 인트로 바꿔줘야 합니다.
정수로 바꿀때 optional타입으로 바뀌니 언래핑 잊지맙시다.
이렇게 함으로써 배열의 정수값들로 여러 조작이 가능해지죠.
파이썬처럼 스위프트도 문자열에서 한개의 문자씩 for문으로 접근할 수 있을까요?
두가지 코드를 예시로 들겠습니다.
var a = 123
var b = String(a)
for i in b{
print(i)
} //가능!
for i in 0..<b.count{
print(b[i])
} //불가능!!!
print(b.count) //개수를 세는건 가능합니다
즉 캐릭터로서의 접근은 가능하나 배열로서의 접근은 불가능합니다.
스트링으로 이루어진 배열을 어떻게 합칠까요?
joined함수를 이용합니다.
var a = ["1", "2", "3"]
print(a.joined())
// 123
'swift' 카테고리의 다른 글
스위프트 배열에 원소 삽입, 제거, 찾기, 포함 (0) | 2022.02.07 |
---|---|
Swift 고차함수 Map, Filter, Reduce (0) | 2022.02.05 |
스위프트 for문 (0) | 2022.02.03 |
스위프트 배열과 enumerated() (0) | 2022.02.03 |
swift String.Index (0) | 2022.02.03 |