반응형
스위프트 배열에서 모든 영 요소를 제거하려면 어떻게 해야 합니까?
기본적인 방법은 통하지 않습니다.
for index in 0 ..< list.count {
if list[index] == nil {
list.removeAtIndex(index) //this will cause array index out of range
}
}
당신의 코드의 문제는0 ..< list.count
루프가 시작될 때 한 번 실행됩니다.list
여전히 모든 요소를 가지고 있습니다.요소 하나를 제거할 때마다list.count
는 감소하지만 반복 범위는 수정되지 않습니다.당신은 결국 너무 많이 읽게 됩니다.
Swift 4.1 이상에서는 를 사용하여 다음을 폐기할 수 있습니다.nil
배열의 요소compactMap
옵션이 아닌 값의 배열을 반환합니다.
let list: [Foo?] = ...
let nonNilElements = list.compactMap { $0 }
옵션 배열을 계속 사용하려면 다음을 사용할 수 있습니다.filter
제거할nil
요소:
list = list.filter { $0 != nil }
Swift 2.0에서는 flatMap을 사용할 수 있습니다.
list.flatMap { $0 }
이제 swift 4.2에서 사용할 수 있습니다.
list.compactMap{ $0 }
list.flatMap{ $0 }
이미 사용되지 않습니다.
훨씬 우아한 해결책은 다음과 같습니다.compacted()
Apple이 직접 만든 Algorithms 패키지에 정의되어 있습니다.
import Algorithms
let array = [10, nil, 20, nil, 30]
print(array.compacted()) // prints [10, 20, 30]
혜택들
- 간결하다.
- 0개 항목을 게으르게 필터링합니다.
더 많은 정보 https://github.com/apple/swift-algorithms/blob/main/Guides/Compacted.md
언급URL : https://stackoverflow.com/questions/31571570/how-can-i-remove-all-nil-elements-in-a-swift-array
반응형
'programing' 카테고리의 다른 글
PowerShell을 사용하여 클래스를 작성할 수 있습니까? (0) | 2023.08.21 |
---|---|
C#의 SQL Server 데이터베이스에서 데이터를 검색하는 방법은 무엇입니까? (0) | 2023.08.21 |
사용자가 필드를 비활성화하지 않고 텍스트 필드를 입력하지 못하도록 하는 방법은 무엇입니까? (0) | 2023.08.16 |
전체 어레이를 덤프하는 중: console.log 및 console.dir 출력 "...더 많은 항목 수]" (0) | 2023.08.16 |
봄에 모델앤뷰 대 모델을 언제 사용해야 합니까? (0) | 2023.08.16 |