Итерация по массиву Swift и изменение значений - PullRequest
0 голосов
/ 03 марта 2019

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

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

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

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

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

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

Ответы [ 3 ]

0 голосов
/ 03 марта 2019

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

let myArray = [["index": 0], ["index":0], ["index":0], ["index":0]]
let myNewArray = myArray.enumerated().map { index, _ in ["index": index] }
0 голосов
/ 03 марта 2019

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

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

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

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

 print(myArray)






 [{
firstDict = 1;
index = 0;
otherKey = 1;
 }, {
index = 1;
otherKey = 1;
secondDict = 2;
}, {
index = 2;
lastDict = 2;
otherKey = 1;
}]
0 голосов
/ 03 марта 2019

Счетчик в цикле 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
}

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

myArray.indices.forEach { myArray[$0]["index"] = $0 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...