Преобразование всего массива из int в удвоение для выполнения некоторых арифметических операций
У меня есть немного кода:
var arrayIntegers : [Int] = []
arrayIntegers += 0...33
var arrayDecimal : [Int] = []
arrayDecimal += 0...999
Проблема в том, что я не могу преобразовать значения обоих массивов в Double. То, что я хочу сделать, это получить новый массив (называемый arrayDoubleComposed) с составными значениями, принимая значение arrayIntegers в качестве целочисленной части, а затем принять другое значение arrayDecimal в качестве плавающей части.
Когда я пытаюсь ввести это:
var arrayDoubleComposed : [Double] = []
arrayDoubleComposed = Double (arrayIntegers[] + (arrayDecimal[])/1000)
Я получил ошибку. То же самое, если я подавлю [].
Я немного новичок, я знаю...
1 ответ
Преобразование одного вида массива в другой - это работа для map
, который применяет функцию к каждому элементу массива, возвращая результаты в виде нового массива того типа, который возвращает функция. В этом случае вам нужна функция, которая преобразует Int
с Double
,
Попробуйте что-то вроде этого:
let integers = Array(0...33)
let fractions = Array(0...999)
let arrayDoubleComposed = map(Zip2(integers, fractions)) {
(i, f) in
Double(i) + Double(f)/1_000
}
Zip2
берет две последовательности и объединяет их - первые элементы вместе, вторые элементы вместе и т. д. Затем это передает это в map
который сочетает в себе два элемента.
(обратите внимание, что вы можете просто инициализировать массивы из диапазонов, а не объявлять их, а затем добавлять значения)
Непонятно, что вы хотите сделать, поскольку целочисленные и дробные массивы будут иметь разную длину. Путь Zip2
обрабатывает это, чтобы остановить, когда заканчивается первая последовательность, но это может быть не то, что вы хотите.
PS приводит к тому, что вы пытались преобразовать содержимое массива в массовом порядке, и работают только в особых случаях при преобразовании типов Objective-C в нативные типы Swift, когда компилятор Swift добавляет немного магии.