2016-05-13 51 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]