Я занимаюсь хранением мест пользователей и элементов, назначенных им в разных таблицах. Подумайте об этом, так как есть пользователь, который продает товары, и местоположение объекта назначено пользователю.Проверка наличия ключа в сложном многомерном словаре
Я использую радиус для поиска мест пользователей. Я могу получить все предметы, если я использую радиус 10 км. Тем не менее, я хочу, чтобы отделить элементы в каждой км, такие как:
- 1km
- Guitar
- Sofa
- 2km
- Citroen
- Renault
- Piano
Проблема заключается в том, что запрос работает, как это так, если я использую «10 км», как радиус, она извлекает все от 0 до 10 км:
let circleQuery = geoFire.queryAtLocation(center, withRadius: 10)
Так что журналы как:
- 1km
- Guitar
- Sofa
- 2km
- Guitar
- Sofa
- Citroen
- Renault
- Piano
Я думал, один из способов может использовать для цикла и хранить его в словарь.
Подход, который я попробовал:
var items = [Int: AnyObject]()
func retrieveItems() {
let center = CLLocation(latitude: userLatitude, longitude: userLongitude)
for index in 1...25 {
let circleQuery = geoFire.queryAtLocation(center, withRadius: Double(index))
// after everything fetched
self.items = [
index : [itemId : value]
]
// So, 'index' would be km
// 'itemId' is the id in db
// 'value' would be 'key: value'
// the database table looks like:
// - itemId:
// key:value
// key:value
}
}
Пример словарь дерево:
let dictionary = [
1 : [
"item1" : ["key": "value", "key": "value"],
"item2" : ["key": "val", "key": "val"],
],
2 : [
"item3" : ["key": "val", "key": "val"],
"item4" : ["key": "val", "key": "val"],
"item5" : ["key": "val", "key": "val"],
]
]
Как каждый раз, когда индекс растет, это выборку, начиная с 0ого, так что это сгрузить уже неправдоподобный материал. Но, используя словарь, возможно, я могу сделать чек, и если «itemId» уже находится в словаре, не добавляйте его повторно.
Мой вопрос: есть ли способ проверить, добавлен ли «itemId» в словаре, используя вышеприведенный подход, поэтому я не добавляю уже добавленные элементы? Каков способ его достижения в сложном многомерном словаре, таком как выше?
Обновление: Я пытался что-то вроде этого, чтобы проверить, если «Itemid» существует
if self.events.indexForKey(index) != nil {
let radius = self.events[index]! as! Dictionary<String, AnyObject>
print("km exists")
} else {
print("distance doesn't exist")
self.items = [
index : [itemId : value]
]
}
Но это всегда происходит внутри else
немного.
Предпочтительно, чтобы вы использовали инструкцию guard let в своем последнем примере кода вместо принудительной разворачивания и else для успешного кода кода. ;-) –
@ Randy Это трюк? Каков способ преодолеть всю проблему? – senty
@senty было бы полезно, если бы вы дали нам пример содержимого self.events, иначе сложно сказать, почему обновленный ответ не работает. Как насчет того, чтобы вы развернули отладчик и проверяли содержимое self.events прямо перед тем, как он оценил предложение if? – jonnydee