2016-05-13 49 views
0

我有两个int阵列,例如:两个数组中的键和值在字典迅速

ARRAY1 = [1,2,3,4]为INT

数组2 = [10,20,30 ,40] as Int

for work我需要创建Dictionary其中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个按键值。

请给我,请指教,如何迅速做到这一点?

upd,我发现我的问题 - 密钥必须是唯一的!所以,非常感谢您的回答,我知道拉链在迅速

+1

您可以使用'zip'。 – ozgur

+1

你有的代码会正常工作,必须有其他事情你正在做的事情导致它不工作 – dan

+0

看起来像你重新初始化你的字典在循环 – ignotusverum

回答

3

几个解决方案从我的头顶:

初始化数组+快译通

let arrayOfValues = [1,2,3,4] 
let arrayOfKeys = [1,2,3,4] 

var arrayOfDict = [Int:Int]() 

对于循环解决方案:

for i in 0..<arrayOfKeys.count { 
    if i < arrayOfValues.count { 

      let key = arrayOfKeys[i] 
      let value = arrayOfValues[i] 

      arrayOfDict[key] = value 
     } 
    } 

使用拉链方法解决:

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

从苹果文档:

拉链:内置了两次基础序列,其中第i个对 的元素是每个底层 序列的第i个元件的双序列(的iOS(9.0和更高版本) )

+0

谢谢,但zip我无法使用,因为我的应用程序在iOS 8.0+ –

+0

和循环解决方案后我打印arrayOfDict并在控制台中只看到最后一个键值 - [4: 4],我不明白我的错误在哪里 –

+0

我建议把它包装在一个'convenience'初始化器中,扩展名为'Dictionary' – Alexander

4

试试这个:

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

如果您不能使用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]