我该如何搜索这个json结构?

时间:2016-07-22 08:05:09

标签: json

我正在使用PHP,我有一个json结构,看起来像这样:

func dictation() {
        let seconds = 1.0
        let delay = seconds * Double(NSEC_PER_SEC)  // nanoseconds per seconds
        let dispatchTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
        dispatch_after(dispatchTime, dispatch_get_main_queue(), {
            self.label.setText("")
            self.myImage.setImageNamed("frame-")
            self.myImage.startAnimatingWithImagesInRange(NSMakeRange(0, 15), duration: 0.5, repeatCount: 0)
        })
        presentTextInputControllerWithSuggestions([], allowedInputMode: .Plain, completion: { (selectedAnswers) -> Void in
            if ((selectedAnswers != nil) && (selectedAnswers!.count>0) ){
                if selectedAnswers![0] is String {
                    self.myImage.stopAnimating()
                    self.myImage.setImageNamed("")
                    self.label.setText((selectedAnswers![0] as! String))
                }
            }
        })
}

我需要连续获取5个事件,但是从一个特定的id开始,所以我的第一个想法是从头开始循环每个事件并检查id是否是我要查找的偏移量,然后当我得到它时,我可以循环接下来的5个事件。

但有更好的方法吗?它可能会循环数百个事件,所以也许有更好的方法到达那里?感谢

3 个答案:

答案 0 :(得分:0)

首先,我要创建一个键:值哈希对象(查找对象),其中键将是结构中的id,值将是对事件的引用。因此,您只需对结构进行一次迭代,然后通过按键访问查找结构中的所有事件。

你也可以对它进行排序(理想情况下,你可以通过数据源中的id对它进行排序),然后使用二进制搜索算法。

答案 1 :(得分:0)

由于id不是数字顺序,因此您无法使用二进制搜索,因此需要使用顺序搜索。这是JavaScript中的一个例子。另请注意,此代码假定id存在且数组中至少还有四个事件。

var index = 0;
var id = 12345;  // for example
var json = {...};  // whatever that object was
while(json.events[index].id!=id) {
    index++;
}

// found the one, do something with the next five
for(var i=0; i<5; i++) {
    var event = json.events[index+i];
    // do something
}

答案 2 :(得分:0)

在我看来,您只能使用过滤器event.id >= theId对事件进行一次循环,然后检查过滤后的数组是否包含theId。如果你得到它,你可以对这个较小的数组进行排序并进行5次事件。