我有一个元组数组,每个元组包含一个键和一个值。目前,我正在过滤所有键大于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))
}
答案 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))
}
我希望它会有所帮助:)