遍历 Swift 数组并更改值

Mik*_*has 5 arrays xcode mapreduce swift

我需要更改 Swift 数组的值。我的第一次尝试只是迭代,但这不起作用,因为我只获得每个元素的副本,并且更改不会影响原始数组。目标是在每个数组元素中都有一个唯一的“索引”。

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

counter = 0
for item in myArray {
  item["index"] = counter
  counter += 1
}
Run Code Online (Sandbox Code Playgroud)

我的下一次尝试是使用地图,但我不知道如何设置递增值。我可以设置,$0["index"] = 1但我需要一个递增的值。使用地图可以通过哪种方式实现?

myArray.map( { $0["index"] = ...? } )
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

iel*_*ani 8

for循环中的计数器是一个常数。要使其可变,您可以使用:

for var item in myArray { ... }
Run Code Online (Sandbox Code Playgroud)

但这在这里不会有帮助,因为我们会变异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]]
Run Code Online (Sandbox Code Playgroud)

counter这里不需要变量:

for i in myArray.indices {
    myArray[i]["index"] = i
}
Run Code Online (Sandbox Code Playgroud)

编写上述内容的一种功能方式是:

myArray.indices.forEach { myArray[$0]["index"] = $0 }
Run Code Online (Sandbox Code Playgroud)


E.C*_*oms 1

我找到了一个简单的方法,想分享一下。

关键是 的定义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;
}]
Run Code Online (Sandbox Code Playgroud)