[Swift] 코테 기초 정리 / 기초적인 고차 함수 정리 / 라이브러리 함수 정리 / 스위프트 코테에서 알아두면 좋은 라이브러리 함수들 정리
2023. 5. 19. 17:27ㆍ🍏/Swift
이번 포스팅은 입문보다는 어느 정도 Swift 고차 함수(Higher-order functions)에 대한 이해가 있어야 쉽게 보실 수 있습니다.
초심자를 위한 swift ps는 바로 밑에 링크에 들어가시면 있습니다. 도움이 되셨으면 좋겠습니다.
Extension String indexing
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
// MARK: - String subscript indexing
// ex) str[2]
extension String {
subscript(_ index: Int) -> Character {
return self[self.index(self.startIndex, offsetBy: index)]
}
}
// MARK: - subscript range indexing to String
// ex) str[0...5]
extension String {
subscript(_ range: Range<Int>) -> String {
let fromIndex = self.index(self.startIndex, offsetBy: range.startIndex)
let toIndex = self.index(self.startIndex,offsetBy: range.endIndex)
return String(self[fromIndex..<toIndex])
}
}
|
map
1
2
3
4
5
6
7
|
func solution(_ arr:[Int]) -> [Int] {
return arr.map {
if $0 % 2 == 0 && 50 <= $0 { return $0 / 2 }
if $0 % 2 != 0 && 50 > $0 { return $0 * 2 }
return $0
}
}
|
enumerated, map
1
2
3
4
5
6
7
8
|
// 홀수번째 인덱스의 문자열은 모든 문자를 대문자
// 짝수번째 인덱스의 문자열은 모든 문자를 소문자로 바꿔서 반환
func solution(_ strArr:[String]) -> [String] {
strArr.enumerated().map{
if $0.0 % 2 == 0 { return $0.1.lowercased() }
else { return $0.1.uppercased() }
}
}
|
stride, map
1
2
3
4
|
// 정수 n과 k가 주어졌을 때, 1 이상 n이하의 정수 중에서 k의 배수를 오름차순으로 저장한 배열을 return
func solution(_ n:Int, _ k:Int) -> [Int] {
return stride(from: k, through: n, by: k).map { $0 } // Array(stride(from: k, through: n, by: k))
}
|
filter
1
2
3
4
5
|
func solution(_ num_list:[Int]) -> Int {
let even = Int(num_list.filter { $0 % 2 == 0 }.map { String($0) }.joined())!
let odd = Int(num_list.filter { $0 % 2 != 0 }.map { String($0) }.joined())!
return even + odd
}
|
enumerated, filter
1
2
3 |
//정수 리스트 num_list와 정수 n이 주어질 때, num_list의 첫 번째 원소부터
//마지막 원소까지 n개 간격으로 저장되어있는 원소들을 차례로 담은 리스트를 return func solution(_ nl:[Int], _ n:Int) -> [Int] {nl.enumerated().filter{$0.0%n==0}.map{$0.1}}
|
배열에서 중복되지 않은 수 찾기.
1
2
3
|
// 한 배열안에 중복되지 않은 숫자를 filter를 활용하여 찾아내기
var c = [1, 3, 3]
let chan = c.filter { n in c.filter { $0 == n }.count == 1 }
|
문자열 치환(대치)
1
2
3
4
|
func solution(_ my_string:String, _ alp:String) -> String {
// alp 라는 소문자를 my_string에서 찾아서 전부 대문자로 바꾸는 코드
return my_string.replacingOccurrences(of:alp, with:alp.uppercased())
}
|
- 문제: numbers를 첫번째 인덱스부터 합하다가 n보다 커지게 되면 합을 중지한다.
reduce의 두번째 파라미터는 _ nextPartialResult: (Result, Self.Element) throws -> Result 이다.
-> 누적 값과 시퀀스의 요소를 새로운 누적 값으로 결합하는 클로저로, nextPartialResult 클로저의 다음 호출에서 사용되거나 호출자에게 반환됩니다.
1
|
func solution(_ numbers:[Int], _ n:Int) -> Int { numbers.reduce(0) { $0 > n ? $0 : $0 + $1 } }
|
for문에 where 절로 조건을 걸 수 있다.
1
2
3
4
5
|
func solution(_ numbers:[Int], _ n:Int) -> Int {
var answer = 0
for number in numbers where answer <= n { answer += number }
return answer
}
|
firstIndex(where:) 로 처음으로 나오는 음수의 value의 값을 걸러내기 만약에 음수 원소가 없다면 -1 반환
1
2
|
func solution(_ arr: [Int]) -> Int { arr.firstIndex(where: { $0 < 0 }) ?? -1 }
|
String 대/소 문자 전환하기
1
2
|
func solution(_ str:String) -> String { str.lowercased() }
func solution(_ str:String) -> String { str.uppercased() }
|
hasPrefix
1
|
func solution(_ m:String, _ p:String) -> Int {m.hasPrefix(p) ? 1:0}
|
Int의 string 처리
1
|
func solution(_ a: Int, _ b: Int) -> Int { max(Int("\(a)\(b)")!, Int("\(b)\(a)")!) }
|
s1에 ex가 포함되면 포함시키지 않는 배열
1
2
3
4
5
6
7
8
9
10
11
|
import Foundation
// 꼬리 문자열
func solution(_ sl:[String], _ ex:String) -> String {
sl.map{
if $0.contains(ex) { return "" }
return $0
}.joined()
}
return str_list.reduce("") { $0 + ($1.contains(ex) ? "" : $1) }
return str_list.filter { !$0.contains(ex) }.joined()
|
'🍏 > Swift' 카테고리의 다른 글
[Swift] Libraries, Frameworks, Swift Packages (0) | 2024.02.01 |
---|---|
[Framework] WebKit (0) | 2023.08.18 |
[Swift] Some / Any (0) | 2023.04.15 |
[Swift] NamingConvention / 명명 규약 (0) | 2023.04.04 |
[Swift] Understanding Swift Performance / WWDC 16 (0) | 2023.03.09 |