遍历Swift数组并更改值

时间:2019-03-03 19:57:27

标签: arrays swift xcode mapreduce

我需要更改Swift数组的值。 我的第一个尝试是仅进行遍历,但是这行不通,因为我仅获得每个元素的副本,并且更改不会影响原点数组。 目标是在每个数组元素中具有唯一的“索引”。

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

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

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

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

感谢您的帮助!

3 个答案:

答案 0 :(得分: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;
}]

答案 1 :(得分:0)

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 }

答案 2 :(得分:0)

如何通过创建全新的数组来存储修改后的字典来实现更实用的方法:

let myArray = [["index": 0], ["index":0], ["index":0], ["index":0]]
let myNewArray = myArray.enumerated().map { index, _ in ["index": index] }