Swift: выполнение операций над определенными элементами массива - PullRequest
0 голосов
/ 03 апреля 2020

Итак, что-то меня беспокоит из-за синтаксиса в Swift для выполнения операций над массивами чисел.

Я хочу сделать следующее: у меня есть массив чисел, который выводится из функции, его размер (count) в настоящий момент варьируется, скажем, от 2 до 6, в зависимости от кнопок, которые я нажимаю в своем приложении.

Для каждого массива, который выводится и содержит n int, я хочу создать n массивов для выполнения другое действие позже.

Предполагается, что эти "под" массивы должны быть рассчитаны следующим образом:

значения newArray1 должны быть значениями массива - значение первого индекса newArray1

значения newArray2 должны быть значениями массива - значение второго индекса newArray2 et c ... (Я автоматизирую число newArrays в соответствии с array.count)

Другое условие, применяемое для эти новые массивы таковы, что если при заданном индексе значение является отрицательным, я добавляю 12 (поэтому это будет происходить для newArray2 в индексе 1, для newArray3 в индексах 1 & 2 и т. д. c ... a пока эти новые массивы созданы). Вот как я хотел это сделать (я создал это с помощью произвольного произвольного массива на игровой площадке для тестирования перед тем, как вставлять в код моего приложения нужные данные):

var array : [Int] = [2,4,6,8,9]

var newArray2 = [Int]()
var increment2 = Int()

increment2 = array[1]

newArray2 = array.map {$0 - increment2}
for i in 0..<newArray2.count {
    if array[i] < 0 {
        newArray2[i] = array[i] + 12
    } else {
        newArray2[i] = array[i]
    }
}

print(array)
print(newArray2)

Так что, конечно, это не так работать, потому что я не могу понять, как правильно выполнять операции над массивами ... Интуитивно кажется, что в моем первом операторе if я сравниваю не элемент с индексом i, а сам i, но не уверен, как это переформатировать ... .

Любая помощь приветствуется, спасибо заранее! :)

[РЕДАКТИРОВАТЬ: я только что отредактировал имена newArray1 в newArray2, то же самое для приращений, так что у меня есть отрицательные значения, и это соответствует значению индекса 1, который является вторым элементом моего основного массива]

1 Ответ

1 голос
/ 03 апреля 2020

Вы, кажется, имеете в виду это:

let arr = [2,4,6,8,9]
var results = [[Int]]()
for i in arr.indices {
    results.append(arr.map {
        var diff = $0-arr[i]
        if diff < 0 { diff += 12 }
        return diff
    })
}
// results is now:
// [[0, 2, 4, 6, 7], 
// [10, 0, 2, 4, 5], 
// [8, 10, 0, 2, 3], 
// [6, 8, 10, 0, 1], 
// [5, 7, 9, 11, 0]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...