logseq 20260125
This commit is contained in:
parent
3bba61c99c
commit
cc384f05ce
@ -80,6 +80,55 @@ deck:: Logseq/coding tip
|
|||||||
let result = numbers.map { $0 * 2 }
|
let result = numbers.map { $0 * 2 }
|
||||||
// 클로저 문법에 따라 입력 변수를 그냥 $0, $1 형태로 해서 바로 사용하는 것도 가능함
|
// 클로저 문법에 따라 입력 변수를 그냥 $0, $1 형태로 해서 바로 사용하는 것도 가능함
|
||||||
```
|
```
|
||||||
|
- ### **◼︎ .reduce()**
|
||||||
|
- **기능**
|
||||||
|
- {{c1 컬렉션(Collection)}}의 모든 요소를 순회하며, 주어진 {{c1 클로저(결합 규칙)}}를 적용해 {{c1 누적된 하나의 결과를 }} 반환하는 함수.
|
||||||
|
id:: 6975f46d-f557-41c8-871a-40e157662aa6
|
||||||
|
- **사용형태 및 예시**
|
||||||
|
- reduce() 기본형
|
||||||
|
- 매 단계마다 {{c1 새로운 값을 생성(Return)}} 하여 다음 클로저의 첫번째 인자로 넘겨줌. 즉 결합 클로저의 반환타입이 reduce의 반환 타입과 일치해야함.
|
||||||
|
extra:: 숫자 합계 등 가벼운 데이터 타입 때 적합.
|
||||||
|
id:: 6975faa2-da0b-4182-8e54-b5035e84ad99
|
||||||
|
- 배열 arr가 주어졌을 때 그 배열의 누적값 sum를 구하는 코드는 ? #card
|
||||||
|
id:: 6975fa93-e64e-4dea-972a-6ef9148b5618
|
||||||
|
- ```swift
|
||||||
|
let arr = [1, 2, 3, 4]
|
||||||
|
let sum = arr.reduce(0, { (currentSum: Int, num: Int) -> Int in
|
||||||
|
return currentSum + num
|
||||||
|
})
|
||||||
|
|
||||||
|
// 클로저 최적화 기법을 쓸 경우
|
||||||
|
let sum = arr.reduce(0){$0 + $1} // 후행 클로저
|
||||||
|
let sum = arr.reduce(0, +) // 연산자 자체가 이미 클로저
|
||||||
|
```
|
||||||
|
- reduce(into: ) 값 수정형
|
||||||
|
- into 키워드로 넣어준 변수를 {{c1 수정하면서}} 값을 누적시킨다. 즉 결합클로저는 이 변수를 {{c1 수정하는 기능}}을 수행하기 때문에 클로저의 첫번째 인자는 {{c1 inout 타입}}으로 선언되어야 하고 반환 타입은 {{c1 void}} 이다.
|
||||||
|
extra:: 미리 선언한 변수를 into에 넣을 경우 그 원본변수는 수정되지 않고 reduce 함수 시작시 사용될 변수의 초기값이 그 원본변수의 값이 될 뿐이다.
|
||||||
|
id:: 6975fcf5-a69a-4abc-8a5c-88ea3f6ebbb7
|
||||||
|
- 문자들의 배열 chars의 모든 요소를 합쳐서 하나의 문자열 str로 반환하라. #card
|
||||||
|
id:: 6975f952-6a13-45fd-b7a7-78815ca634a7
|
||||||
|
- ```swift
|
||||||
|
let chars = ["a", "b", "c"]
|
||||||
|
let str = chars.reduce(into: "", { (result: inout String, char: String) in
|
||||||
|
result.append(char)
|
||||||
|
})
|
||||||
|
|
||||||
|
//클로저 최적화
|
||||||
|
let str = chars.reduce(into: ""){$0.append($1)}
|
||||||
|
```
|
||||||
|
- 문자열 letters의 각 알파벳 별 빈도수를 출력하라 #card
|
||||||
|
id:: 6975feb8-3361-42c2-b913-2f7a70d731b6
|
||||||
|
- ```swift
|
||||||
|
let letters = "abracadabra"
|
||||||
|
|
||||||
|
// 딕셔너리에 문자별 등장 횟수 누적
|
||||||
|
let counts = letters.reduce(into: [:]) { counts, letter in
|
||||||
|
counts[letter, default: 0] += 1
|
||||||
|
}
|
||||||
|
|
||||||
|
print(counts)
|
||||||
|
```
|
||||||
|
-
|
||||||
-
|
-
|
||||||
- ## **► 클로저(Closure)**
|
- ## **► 클로저(Closure)**
|
||||||
- ### **◼︎ 정의** #card
|
- ### **◼︎ 정의** #card
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user