>

운동장에 다음 코드가 있습니다 :

let array = [3,3]
let first = array.first!
let last = array.last!
let indices = [array.index(of: first)!, array.index(of: last)!]
print(indices) // This prints [0,0]

"index (of :)"메서드는 배열에서 첫 번째로 일치하는 인스턴스를 가져 오는 것이 더 효율적이라는 것을 이해하지만, 그 사실을 기반으로 마지막 인덱스를 가져올 수 있는지 궁금합니다. "array.last"에서 값을 얻었습니다.

또한 다음과 같은 경우

let lotsOfThrees = [3,3,3,3,3,3,3]
let fourthThree = lotsOfThrees[3]
// Write code to return the index of "fourthThree" (possibly based on memory address)

메모리 주소를 기반으로이 작업을 수행 할 수있는 방법이 있는지 궁금하지만 확실하지 않습니다.


  • 답변 # 1

    배열을 뒤집은 다음처음어커런스의 인덱스를 가져 와서 요소의마지막인덱스를 얻을 수 있습니다. 그러면 원래 배열의 마지막 요소 색인은 (반전 배열에서 처음 나타나는 색인)-(배열의 크기)-1. 추가 재미를 위해 확장 방법에 넣습니다.

    extension Array<T> {   
        func lastIndex(of item: T) -> Int? {
            if let lastIndex = self.reverse().index(of: item) {
                return self.count() - lastIndex - 1
            } else {
                return nil
            }
        }
    }
    
    

  • 답변 # 2

    enumerated() 사용을 제안합니다  그리고 filter  찾고자하는 가치와 지수를 연결하는 방법 :

    let lotsOfThrees = [3, 3, 3, 3, 3, 3, 3]
    let threesAndIndices = lotsOfThrees.enumerated().filter { $1 == 3 }
    print(threesAndIndices)
    
    
    와이즈 비즈 와이즈 비즈
    
    와이즈 비즈
    와이즈 비즈
    
    [(offset: 0, element: 3), (offset: 1, element: 3), (offset: 2, element: 3), (offset: 3, element: 3), (offset: 4, element: 3), (offset: 5, element: 3), (offset: 6, element: 3)]
    
    
    와이즈 비즈 와이즈 비즈 <시간>

    배열의 크기를 확인하고 다음과 같은 마지막 값이 있다고 가정해서는 안됩니다 :

    // find index of last three
    print(threesAndIndices.last!.offset)
    
    
    와이즈 비즈 와이즈 비즈
    
    와이즈 비즈
    와이즈 비즈
    
    6

  • 이전 루비 분리 구문
  • 다음 c++ - Visual Studio에서 C3867 오류, 이것이 무엇을 의미하는지 모르겠습니다