在Swift中有效地搜索数组

时间:2015-01-27 19:06:53

标签: arrays performance sorting search swift

我有大量的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)")
    }
}

2 个答案:

答案 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)")
    }
}
相关问题