2015-11-28 2 views
1
var tempsArray = [65,62,63,64,67,68,69,68,67,65,63,65,65] 

func createCoordinates(temps: [Int]) -> Dictionary<Int, Int> { 
    var tempCoordinates = [Int: Int]() 

    for temperature in temps { 
     tempCoordinates[temperature] = temps[temperature] 
    } 

    return tempCoordinates 
} 

createCoordinates(tempsArray) 

Цель - это функция, которая принимает в качестве единственного параметра массив Ints и возвращает словарь координат. В этом случае цель (0: 65,1: 62,2: 63, ...)Как сгенерировать словарь в быстром из массива

Мой код не выполняется и дает мне ошибку «индекс массива вне диапазона»

+1

Вы знаете, что словарь ключа целого числа от 0..n эффективно массива правильно? – Paulw11

ответ

3

Это легко достичь с помощью enumerate():

let tempsArray = [65,62,63,64,67,68,69,68,67,65,63,65,65] 

var dict = [Int:Int]() 
for (index, value) in tempsArray.enumerate() { 
    dict[index] = value 
} 

print(dict) 

Результат:

[12: 65, 10: 63, 5: 68, 7: 68, 0: 65, 11: 65, 3: 64, 2: 63, 4: 67, 9: 65, 6: 69, 8: 67, 1: 62]

Помните, что словари представляют собой неупорядоченные коллекции.

Я считаю, что вам будет легко адаптировать этот простой пример к вашим потребностям. Если нет, скажите мне, где вы застряли, и я помогу.

+0

Я решил эту проблему почти сразу после публикации ее с довольно похожим подходом к вашему. У меня возникли проблемы с реализацией метода сортировки в моем словаре и попыткой полагаться на быструю языковую ссылку, но она также может быть написана на мандаринском языке. –

+1

После пересмотра моего кода я решил свою проблему, спасибо за вашу поддержку! –

+0

Добро пожаловать. – Moritz

0

Более простая форма:

tempsArray.reduce([Int:Int]()) { 
    (var d, v)->[Int:Int] in 
    d[d.count] = v 
    return d 
} 
Смежные вопросы