我有大量的PFObjects:giantRestaurantArray
。我想检查每个数组对象"FoodType"
是否包含checkFoodOptionsArray
中的任何类型的食物。如果找到食物类型,请将食物类型添加到foundFoodTypes
数组。
循环效率低,因为它反复检查数组(即使已找到食物类型)。如何提高搜索效果并跳过已添加的FoodTypes
?
var checkFoodOptionsArray = ["American", "BBQ", "Breakfast", "Buffet", "Burgers", "Cafe", "Wings", "Chinese", "Dessert", "FastFood", "Indian", "Italian", "Japanese", "Korean", "Pizza", "Sandwiches", "Seafood", "Steakhouse", "Thai", "Mexican", "Vietnamese", "Vegan", "OtherEthnic"]
for items in checkFoodOptionsArray { checkIfFoodTypeOptionAvailable(items) }
func checkIfFoodTypeOptionAvailable(optionValue: String){
let isAvailable = contains(giantRestaurantArray as [PFObject]) { (object) -> Bool in
if let type = object["FoodType"] as? String {
return type.rangeOfString(optionValue) != nil
}
else {
return false
}
}
if isAvailable == true {
foundFoodTypes.append(optionValue)
} else {
println("No, array does not contain \(optionValue)")
}
}
答案 0 :(得分:0)
您可以只构建Dictionary
的{{1}}。建筑可能有点贵,但查找基本上是免费的:
FoodTypes
答案 1 :(得分:0)
我认为您只想在找到该项目后立即终止搜索,因此请勿使用contains
。
func checkIfFoodTypeOptionAvailable(optionValue: String){
let isAvailable = false
for obj in giantRestaurantArray {
if let object = obj as? PFObject {
if let type = object["FoodType"] as? String {
isAvailable = type.rangeOfString(optionValue) != nil
if isAvailable {
break
}
}
}
}
if isAvailable == true {
foundFoodTypes.append(optionValue)
} else {
println("No, array does not contain \(optionValue)")
}
}