我正在使用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个事件。
但有更好的方法吗?它可能会循环数百个事件,所以也许有更好的方法到达那里?感谢
答案 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次事件。