알고리즘 문제를 풀다보면 배열에 있는 문자나 문자열을 차례대로 출력해야 하는 경우가 있습니다.
스위프트는 타입에 매우 민감하기 때문에 둘을 출력할 때에 다르게 출력해야 하는데,
각각의 상황에서 어떻게 출력해야 하는지와 이유가 무엇인지에 대해 작성하고자 합니다.
문자 (Character)
문자가 들어있는 배열탑을 출력할 때에 보통 다음과 같이 풉니다.
var array = [Character]()
array = ["a", "b", "c", "d"]
for arr in array {
print(arr, terminator: "")
}
// abcd
하지만 String을 이용하면 for문을 사용하지 않고도 바로 출력할 수 있습니다.
var array = [Character]()
array = ["a", "b", "c", "d"]
print("array", String(array))
// abcd
배열에 있는 Character들을 하나의 String으로 합치는 방식입니다.
하지만 만약 문자 사이마다 띄어쓰기 등을 하고 싶을 때에는 다음과 같은 방식을 사용할 수 없습니다.
왜냐하면 String을 통해 여러 문자를 하나의 문자열로 만들어주었기 때문입니다.
만약 a b c d와 같이 띄어쓰기를 적용하고 싶다면 다음과 같이 만들어주어야 합니다.
var array = [Character]()
array = ["a", "b", "c", "d"]
print("띄어쓰기 ", array.map { String($0) }.joined(separator: " "))
// a b c d
map을 통해 각각을 하나의 String으로 변환 후, joined를 통해 띄어쓰기를 추가해주어야 합니다.
문자열(String)
문자열 또한 다음과 같이 출력하고 있을 수 있습니다.
var array = [String]()
array = ["a", "b", "c", "d"]
for arr in array {
print(arr, terminator: "")
}
// abcd
하지만 위에서 나왔던 joined를 통해 한 줄로 해결할 수 있습니다.
var array = [String]()
array = ["a", "b", "c", "d"]
print(array.joined(separator: ""))
// abcd
여기서 문득 'Character에서 joined를 바로 사용하지 못하는 이유'가 궁금했습니다.
이와 관련하여 sorted()와 joined()를 통해 알아보겠습니다.
sorted() vs joined()
String이 아닌 다른 타입의 변수가 있을 때 String으로 변환 후 sorted()를 하면서 joined를 시도하려고 하면 되지 않습니다.
sorted()
sorted() 메서드의 정의를 살펴보면 [Character]를 반환합니다.
joined()
하지만 joined() 메서드의 정의를 살펴보면 String을 매개변수로 받고, String을 반환함을 알 수 있습니다.
따라서 타입이 다르기 때문에 sorted()를 사용한 다음에 joined를 사용하지 못하는 것이었습니다.
만약 sorted() 다음에 joined()를 사용하고자 한다면 타입을 변환시켜준 뒤, 사용할 수 있습니다.
var str = "432"
print(str.map { String($0) }.joined(separator: " "))
// 4 3 2
이번 기회를 통해 sorted()와 joined() 등에 대해 더욱 배웠습니다.
'Swift' 카테고리의 다른 글
[Swift] 클래스와 프로토콜에 대한 고찰 및 사용 기준 (0) | 2025.01.23 |
---|---|
[Swift] 스위프트 - Character를 Int로 변환 (wholeNumberValue) (0) | 2024.01.01 |
[Swift] 스위프트에서의 ,와 &&의 차이점 (2) | 2023.12.28 |
[Swift] Swift의 메모리 구조 (0) | 2023.08.18 |
[Swift] Swift API Design Guidelines 요약 및 정리 (0) | 2023.08.14 |