카테고리 없음

swift enumerated() 대해 알아보자

kingarthur 2024. 6. 18. 18:56

일단 야구게임을 풀면서 enumerated() 사용하는 것을 보았다.

이전에도 한번 사용하긴 했는데 나는 다른 방식으로 사용을 하여 배열에서 값을 알아냈다...

머 아무튼 다시 이런 방법이 있구나 생각하게 되어서. 까먹지 않게 메모장에 남긴다.

 

"map을 쓸 때 element 랑 추가로 index는 동시에 사용하는 방법

https://developer.apple.com/documentation/swift/repeated/enumerated()/

 

 

바로 이 함수입니다!! 

 

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

 

 

https://developer.apple.com/documentation/swift/enumeratedsequence/

 

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를 반합니다.

 

평소에는 어떻게 돌아가는지는 몰라서 값이 이렇게 나오는구나 했는데. 

이제는 어떤씩으로 돌아가는지 개념은 잡은것같다. 

아직 배워야 될게 산더미 인것 같다.