반응형
신속한 변환 범위 [Int]로
범위를 배열로 변환하는 방법
나는 시도했다 :
let min = 50
let max = 100
let intArray:[Int] = (min...max)
오류가 발생하다 Range<Int> is not convertible to [Int]
나는 또한 시도했다 :
let intArray:[Int] = [min...max]
과
let intArray:[Int] = (min...max) as [Int]
그들도 작동하지 않습니다.
당신은 할 필요가 생성Array<Int>
사용 Range<Int>
보다는 캐스트 를 보내고.
let intArray: [Int] = Array(min...max)
범위를 초기화합니다.
let intArray = [Int](min...max)
하다:
let intArray = Array(min...max)
때문에이 작업을해야합니다 Array
복용하는 이니셜 라이저가 SequenceType
와 Range
에 부합를 SequenceType
.
나는 그것을 알아:
let intArray = [Int](min...max)
다른 사람에게 신용을주기.
사용하다 map
let min = 50
let max = 100
let intArray = (min...max).map{$0}
흥미롭게도 (적어도 Swift 3 및 Xcode 8에서는) Range<Int>
객체를 직접 사용할 수 없습니다 .
let range: Range<Int> = 1...10
let array: [Int] = Array(range) // Error: "doesn't conform to expected type 'Sequence'"
따라서 앞에서 언급했듯이 다음과 같이 범위를 수동으로 "언 래핑"해야합니다.
let array: [Int] = Array(range.lowerBound...range.upperBound)
즉, 리터럴 만 사용할 수 있습니다.
Swift 3 / Xcode 8부터 CountableRange
편리한 유형이 있습니다.
let range: CountableRange<Int> = -10..<10
let array = Array(range)
print(array)
// prints:
// [-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
그것은에서 직접 사용할 수 있습니다 for
- in
루프 :
for i in range {
print(i)
}
이와 같은 함수에서 reduce ()를 사용하여 ClosedRange 및 Range 인스턴스 간격을 구현할 수 있습니다.
func sumClosedRange(_ n: ClosedRange<Int>) -> Int {
return n.reduce(0, +)
}
sumClosedRange(1...10) // 55
func sumRange(_ n: Range<Int>) -> Int {
return n.reduce(0, +)
}
sumRange(1..<11) // 55
참고 URL : https://stackoverflow.com/questions/32103282/swift-convert-rangeint-to-int
반응형
'developer tip' 카테고리의 다른 글
PowerShell에서 경로를 정규화하는 방법은 무엇입니까? (0) | 2020.09.20 |
---|---|
TypeScript에서 json 파일 가져 오기 (0) | 2020.09.20 |
Oracle SQL 이스케이프 문자 ( '&'용) (0) | 2020.09.20 |
원본 목록에서 중복을 제거하지 않고 두 목록을 결합하고 중복 제거 (0) | 2020.09.20 |
R system.time (exp) 출력에서 측정하는 '사용자'및 '시스템'시간은 무엇입니까? (0) | 2020.09.19 |