2016-01-06 3 views
0

Возможно ли иметь словарь, содержащий несколько значений для одного ключа? Например, у меня есть несколько ID (101,102,103,104 ...), и все эти ID имеют некоторые значения (цвет: зеленый, номер: 4, город: Нью-Йорк). Я новичок в программировании и не знаю, как его хранить.Словарь, содержащий несколько значений для ключей с использованием Swift

Я думал о пользовательском классе:

class myClass: NSObject { 
    var ID: Int 
    var colour: String 
    var number: Int 
    var city: String 

    init(ID: Int, colour: String, number: Int, city: String) { 
     self.ID = ID 
     self.colour = colour 
     self.number = number 
     self.city = city 
    } 
} 

И создать некоторую переменную var myData = myClass() и просто все, что есть, но то, как я могу получить доступ позволяет сказать, ID 102 и изменить свой цвет? Итак, мой вопрос, как хранить данные, представленные в моем примере, с возможностью выбора конкретного идентификатора и изменения значений, принадлежащих этому идентификатору.

+0

Если словарь может содержать несколько значений для того же ключа, значение вы вернетесь, когда вы попытаетесь получить ключ с указанным ключом? Как словарь определит, какое из нескольких значений будет возвращено? Как вы получите доступ к другим значениям? Как уже было сказано ниже, вам необходимо сохранить массивы объектов в вашем словаре для достижения такого эффекта. –

ответ

1

Если у вас есть два экземпляра вашего класса

let item101 = MyClass(ID: 101, colour: "red", number: 4, city: "NewYork") 
let item102 = MyClass(ID: 102, colour: "green", number: 7, city: "Chicago") 

Вы можете хранить их в словаре, используя ID в качестве ключа

let dictionary = [101: item101, 102: item102] 

и получить значение ID с

if let id101 = dictionary[101] { 
    // use id101 
} else { 
    print("ID 101 not found") 
} 

или вы можете использовать массив

let array = [item101, item102] 

и получить деталь ID с filter функцией

let filtered = array.filter{ $0.ID == 102 } 
if !filtered.isEmpty { 
    let id102 = filtered[0] 
} else { 
    print("ID 102 not found") 
} 
2

Словарь должен содержать только одно значение для каждой клавиши. Однако это значение может быть массивом или словарем или объектом и т. Д. И т. Д., Поэтому это не является практическим ограничением.

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

0

Признаться идентификатор с массивом и Еогеасп в том, что ID

var ID: [Int] 
Смежные вопросы