일단 야구게임을 풀면서 enumerated() 사용하는 것을 보았다.
이전에도 한번 사용하긴 했는데 나는 다른 방식으로 사용을 하여 배열에서 값을 알아냈다...
머 아무튼 다시 이런 방법이 있구나 생각하게 되어서. 까먹지 않게 메모장에 남긴다.
"map을 쓸 때 element 랑 추가로 index는 동시에 사용하는 방법

바로 이 함수입니다!!
평소에는 for in 구문을 통해서 배열의 첫 인덱스부터 마지막 인덱스까지 얻었습니다. map을 사용할 때는 index를 미리 선언하고 값을 증가하며 사용 했습니다. 이젠 이 함수를 사용하면 됩니다!!


EnumeratedSequence를 반환 하는데 (n,x) 이렇게 쌍을 반환합니다.
여기서 n은 0 ~ Sequence.count-1까지 index를 의미합니다. x는 Sequence의 첫 원소부터 마지막 원소까지를 의미합니다.
for (n, c) in "Swift".enumerated() {
print("\(n): '\(c)'")
}
// Prints "0: 'S'"
// Prints "1: 'w'"
// Prints "2: 'i'"
// Prints "3: 'f'"
// Prints "4: 't'"
대박..
예를들어
사과의 크기가 1~8까지 있습니다. list 배열에는 사과의 크기가 무작위로 들어가 있습니다.
list = [3,1,3,8,4]
사과의 가격은 무조건 index 0~4까지 5개 고정으로
costs = [5,7,8,2,3]
정해져 있습니다.
길다란 통이 있는데 그 통에는 크기가 4 이하인 사과만 담을 수 있습니다. 그래서 크기가 4이하인 사과를 전부 사려고 합니다. 이때의 가격 측정을 계산하는 문제가 있다고 한다고 가정하고 enumerated()를 사용해보려고 합니다.
결과는
var result = 0 에 추가할 것입니다.
1. 기본적인 for in 구문과 if 조건문 활용
for idx in 0..<list.count {
if list[idx] <= 4 {
result += costs[idx]
}
}
2. for in 구문에서 enumerated() 활용
for (idx,apple) in list.enumerated() {
if apple <= 4 {
result += costs[idx]
}
}
3. map에서 enumerated() 활용
_=list.enumerated().map{ (idx,apple) in
if list[idx] <= 4 {
result += costs[idx]
}
}
print(result)
4. map과 filter + enumerated() 활용
_=list.enumerated().filter{$0.element<=4}.map{result+=costs[$0.offset]}
print(result)
여기서 $0은 (offset, element) 를 반환하고 element는 Sequence의 원소, offset는 해당 element의 index를 반합니다.
평소에는 어떻게 돌아가는지는 몰라서 값이 이렇게 나오는구나 했는데.
이제는 어떤씩으로 돌아가는지 개념은 잡은것같다.
아직 배워야 될게 산더미 인것 같다.
'코딩' 카테고리의 다른 글
swift UIButton.Configuration 개념 대해 공부해보자 (0) | 2024.06.24 |
---|---|
swift 접근제한자 private 공부해보자 (0) | 2024.06.20 |
swift 내장함수 print 안에 separator 과 terminator 알아보자 (0) | 2024.06.18 |
swift 고참함수 compactMap, flatMap에 대해 알아봅시다. (0) | 2024.06.18 |
swift readline 대해 알아보자 (0) | 2024.06.17 |