Necesito cambiar los valores de una matriz Swift. Mi primer intento fue simplemente iterar, pero esto no funciona ya que solo obtengo una copia de cada elemento y los cambios no afectan la matriz de origen. El objetivo es tener un "índice" único en cada elemento de la matriz.
myArray = [["index": 0], ["index":0], ["index":0], ["index":0]] counter = 0 for item in myArray { item["index"] = counter counter += 1 } Mi siguiente intento fue usar el mapa, pero no sé cómo establecer un valor creciente. Podría establecer $0["index"] = 1 pero necesito un valor creciente. ¿De qué manera sería esto posible usando el mapa?
myArray.map( { $0["index"] = ...? } )¡Gracias por cualquier ayuda!
El contador en un bucle for es una constante. Para hacerlo mutable, podrías usar:
for var item in myArray { ... } Pero eso no será útil aquí ya que estaríamos mutando el item y no los elementos en myArray .
Podrías mutar los elementos en myArray de esta manera:
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]] La variable de counter no es necesaria aquí:
for i in myArray.indices { myArray[i]["index"] = i }Una forma funcional de escribir lo anterior sería:
myArray.indices.forEach { myArray[$0]["index"] = $0 }Encontré una manera simple y me gustaría compartirla.
La clave es la definición de myArray . Tendría éxito si es de esta manera:
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; }]¿Qué tal un enfoque más funcional mediante la creación de una nueva matriz para almacenar los diccionarios modificados?
let myArray = [["index": 0], ["index":0], ["index":0], ["index":0]] let myNewArray = myArray.enumerated().map { index, _ in ["index": index] }