更新元组数组中的每个键

时间:2018-08-12 12:35:47

标签: ios arrays swift foreach tuples

我有一个元组数组,每个元组包含一个键和一个值。目前,我正在过滤所有键大于Int的元组。然后,使用此过滤后的数组更新其键中的每个键,但保持相同的值。

我目前的操作方式不起作用,因为它会在我添加新键之前删除键等于已过滤键的所有元组,这是可以理解的。

我想做的是,而不是先删除它们然后再添加回去,而只是更新它们的每个密钥,但是由于我是编码的新手,所以我不知道该怎么做。我想这与compactMap或flatMap有关,但同样,不知道如何执行此操作。

我们非常感谢您的帮助,非常感谢!

我的tupleArray:

[(键:1,值:“ A”),(键:2,值:“ V”),(键:3,值:“ E”),(键:4,值:“ N” )]

我希望输出为:

[(键:1,值:“ A”),(键:4,值:“ V”),(键:5,值:“ E”),(键:6,值:“ N” )]

当前输出是什么

[(键:1,值:“ A”),(键:5,值:“ E”),(键:6,值:“ N”)]

代码:

var tupleArray = [(key: Int, value: String)]()
var row = 1
var newValues = 2


let filterTupleArray = self.tupleArray.filter { $0.key > row}

filterTupleArray.forEach { (data) in
    let newKey = data.key + newValues
    let values = data.value
    self.tupleArray = self.tupleArray.filter({ $0.key != data.key})
    self.tupleArray.append((key: newKey, value: values))
}

2 个答案:

答案 0 :(得分:3)

您可以将数组中的每个元组map更改为新的元组, 相同或修改后的密钥:

tupleArray = tupleArray.map {
    (key: $0.key > row ? $0.key + newValues : $0.key, value: $0.value)
}

独立示例:

var tupleArray = [(key: 1, value: "A"), (key: 2, value: "V"),
                  (key: 3, value: "E"), (key: 4, value: "N")]

let row = 1
let newValues = 2

tupleArray = tupleArray.map {
    (key: $0.key > row ? $0.key + newValues : $0.key, value: $0.value)
}

print(tupleArray)
// [(key: 1, value: "A"), (key: 4, value: "V"), (key: 5, value: "E"), (key: 6, value: "N")]

答案 1 :(得分:1)

嗨,您可以通过两种方式完成此操作

一个字典:[Int:String]

和一个数组

如果你有这个 var dict:[Int:String] = [1:“ A”,2:“ V”,3:“ E”,4:“ N”]

开玩笑

//以字典方式:

var newDict:[Int :  String] = [:]

//对于数组方式:

var tupleArray = [(key: Int, value: String)]()

代码:

   for item in arr {
        var old = dict[item] ?? ""
        var i = item
        i += 2

        if item != 1 {
        newDict.updateValue(old, forKey: i)
            tupleArray.append((key: i, value: old))
        }else{
        newDict.updateValue(old, forKey: 1)
            tupleArray.append((key: 1, value: old))
        }

我希望它会有所帮助:)