Итерация по массиву Swift и изменение значений

Мне нужно изменить значения массива Swift. Моя первая попытка состояла в том, чтобы просто выполнить итерацию, но это не работает, поскольку я получаю только копию каждого элемента, и изменения не влияют на исходный массив. Цель состоит в том, чтобы иметь уникальный «индекс» в каждом элементе массива.

myArray = [["index": 0], ["index":0], ["index":0], ["index":0]]

counter = 0
for item in myArray {
  item["index"] = counter
  counter += 1
}

Моя следующая попытка была с использованием карты, но я не знаю, как установить возрастающее значение. Я мог бы установить [112]["index"] = 1, но мне нужно увеличить значение. Каким образом это было бы возможно при использовании карты?

myArray.map( { [111]["index"] = ...? } )

Спасибо за любую помощь!

-1
задан Mike Nathas 3 March 2019 в 20:05
поделиться

3 ответа

Я нашел простой способ и хотел бы поделиться им.

Ключом является определение myArray. Это было бы успешным, если бы это было так:

 let myArray : [NSMutableDictionary] = [["firstDict":1, "otherKey":1], ["secondDict":2, "otherKey":1], ["lastDict":2, "otherKey":1]]

 myArray.enumerated().forEach{[110].element["index"] = [110].offset}

 print(myArray)






 [{
firstDict = 1;
index = 0;
otherKey = 1;
 }, {
index = 1;
otherKey = 1;
secondDict = 2;
}, {
index = 2;
lastDict = 2;
otherKey = 1;
}]
0
ответ дан E.Coms 3 March 2019 в 20:05
поделиться

Как насчет более функционального подхода путем создания нового массива для хранения измененных словарей:

let myArray = [["index": 0], ["index":0], ["index":0], ["index":0]]
let myNewArray = myArray.enumerated().map { index, _ in ["index": index] }
0
ответ дан Code Different 3 March 2019 в 20:05
поделиться

Счетчик в цикле for является константой. Чтобы сделать его изменчивым, вы можете использовать:

for var item in myArray { ... }

Но это не поможет, поскольку мы будем мутировать item, а не элементы в myArray.

Вы можете изменить элементы в myArray следующим образом:

var myArray = [["index": 0], ["index":0], ["index":0], ["index":0]]

var counter = 0

for i in myArray.indices {
    myArray[i]["index"] = counter
    counter += 1
}

print(myArray) //[["index": 0], ["index": 1], ["index": 2], ["index": 3]]

Переменная counter здесь не нужна:

for i in myArray.indices {
    myArray[i]["index"] = i
}

A Функциональный способ написания вышесказанного будет:

myArray.indices.forEach { myArray[[113]]["index"] = [113] }
0
ответ дан ielyamani 3 March 2019 в 20:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: