【问题标题】:Two arrays in key and value in Dictionary swiftDictionary swift中键和值中的两个数组
【发布时间】:2016-05-13 19:21:39
【问题描述】:

我有两个 Int 数组,例如:

array1 = [1, 2, 3, 4] as Int

array2 = [10, 20, 30, 40] 作为 Int

为了工作,我需要创建 Dictionary where Key - 它是来自 array1 的元素和 Value - 它是来自 array2 的元素,在我的示例中 - [1:10, 2:20, 3:30, 4:40] 作为 [Int:Int ].

所以,当我创建循环时:

    for i in 0..<arrayOfKeys.count {

        dictionaryOfData[arrayOfKeys[i]] = arrayOfValues[i]

    }

我只看到最后 [4:40],但我知道我必须拥有带有 4 个键值的字典。

请给我建议,如何快速做到这一点?!

更新,我发现我的问题 - 键必须是唯一的!所以,非常感谢你的回答,我知道 zip in swift

【问题讨论】:

  • 你可以使用zip
  • 您的代码可以正常工作,但您正在做的其他事情导致它无法正常工作
  • 看起来你正在 for 循环中重新初始化你的字典
  • 所以,在循环之后我只使用 print(dictionaryOfData) 并且只在控制台中看到最后 [4:40]

标签: ios arrays swift dictionary


【解决方案1】:

试试这个:

let array1 = [1, 2, 3, 4]    
let array2 = [10, 20, 30, 40]

var dict = [Int: Int]()
zip(array1, array2).forEach { dict[$0] = $1 }

print(dict)

【讨论】:

    【解决方案2】:

    我想不出几个解决方案:

    初始化数组 + 字典

    let arrayOfValues = [1,2,3,4]
    let arrayOfKeys = [1,2,3,4]
    
    var arrayOfDict = [Int:Int]()
    

    for循环解决方案:

    for i in 0..<arrayOfKeys.count {
        if i < arrayOfValues.count {
    
                let key = arrayOfKeys[i]
                let value = arrayOfValues[i]
    
                arrayOfDict[key] = value
            }
        }
    

    使用zip方式解决:

    for (key, value) in zip(arrayOfValues, arrayOfKeys) {
            arrayOfDict[key] = value
        }
    

    来自苹果文档:

    zip:由两个底层序列组成的对序列,其中 第 i 个对的元素是每个底层证券的第 i 个元素 序列。(iOS(9.0 及更高版本))

    【讨论】:

    • 谢谢,但我不能使用 zip,因为我的应用在 iOS 8.0+ 中运行
    • 在循环解决方案之后我打印 arrayOfDict 并在控制台中只看到最后一个键值 - [4:4],我不明白我的错误在哪里
    • 我建议将其包装在 convenience 初始化器中,在 Dictionary 的类扩展中
    【解决方案3】:

    如果您不能使用 Zip,如果两个数组具有相同数量的元素,您可以枚举您的数组:

    let array1 = [1, 2, 3, 4]
    let array2 = [10, 20, 30, 40]
    
    var result: [Int:Int] = [:]
    
    array1.enumerate().forEach{ result[$0.element] = array2[$0.index] }
    
    result  // [2: 20, 3: 30, 1: 10, 4: 40]
    

    【讨论】:

      【解决方案4】:

      这是从www.tutorialspoint.com 获取的 Swift 4 的更新答案:

      let cities = ["Delhi", "Bangalore", "Hyderabad"]
      let distances = [2000, 10, 620]
      let cityDistanceDict = Dictionary(uniqueKeysWithValues: zip(cities, distances))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-30
        • 1970-01-01
        • 2017-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多