代码之家  ›  专栏  ›  技术社区  ›  WH48

更新元组数组中的每个键

  •  0
  • WH48  · 技术社区  · 6 年前

    我有一个元组数组,每个元组都包含一个键和一个值。目前,我正在筛选所有键大于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 回复  |  直到 6 年前
        1
  •  3
  •   Martin R    6 年前

    你可以 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")]
    
        2
  •  1
  •   Lioz Balki    6 年前

    嗨你可以用两种方法

    一个是dict:[Int:String]

    还有一个有阵列

    var dict:[Int:String]=[1:“A”,2:“V”,3:“E”,4:“N”]

    开玩笑

    //对于dict way:

    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))
            }