检查复杂多维字典中是否存在密钥

时间:2016-05-22 22:06:15

标签: ios swift dictionary nsdictionary

我正在存储用户'在不同表格中分配给它们的位置和项目。将其视为用户正在销售的商品以及商品的位置已分配给用户。

我使用radius来检索用户'位置。如果我使用10公里半径,我可以检索所有项目。但是,我想将项目分隔到每公里,例如:

- 1km
  - Guitar
  - Sofa
- 2km 
  - Citroen
  - Renault
  - Piano

问题是查询的工作方式是这样的,所以如果我使用' 10km'作为半径,它从0到10km取出所有内容:

let circleQuery = geoFire.queryAtLocation(center, withRadius: 10)

所以记录如下:

- 1km
  - Guitar
  - Sofa
- 2km 
  - Guitar
  - Sofa
  - Citroen
  - Renault
  - Piano

我认为有一种方法可以使用for循环并将其存储到字典中。

我尝试的方法:

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"],
    ]
]

每当索引增加时,它从0km开始提取,因此它重新获取已经获取的东西。但是,使用字典,也许我可以检查,如果' 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位。

1 个答案:

答案 0 :(得分:1)

如果您不想获得重复事件,则应该在25 km处执行一次查询,检索所有密钥,然后使用客户端逻辑将这些信息过滤到单个km组中。您可以计算返回的键坐标与查询中心之间的距离using some math