Swift 我需要创建带有命名索引的数组并在其中搜索

Swift 我需要创建带有命名索引的数组并在其中搜索,swift,swift3,Swift,Swift3,我需要使用以下信息创建一个数组: 水果:计数(“苹果”:“14”,“橘子”:“3”,“葡萄”:“6”,…) 然后搜索它,看看我们是否有任何(水果)索引?如果没有添加1个数量,如果存在,则在其(计数)中添加1 var fruits:[String:Int] = ["apple":14,"orange":3,"grape":6] let filtered = fruits.filter({$0.key.elementsEqual("apple")}) fruits["apple"] = (fruit

我需要使用以下信息创建一个数组:

水果:计数(“苹果”:“14”,“橘子”:“3”,“葡萄”:“6”,…)

然后搜索它,看看我们是否有任何(水果)索引?如果没有添加1个数量,如果存在,则在其(计数)中添加1

var fruits:[String:Int] = ["apple":14,"orange":3,"grape":6]
let filtered = fruits.filter({$0.key.elementsEqual("apple")})
fruits["apple"] = (fruits["apple"] ?? 0) + 1

print(fruits["apple"])
在第一行中,您创建了一个键和值的字典。 在第二行中,您使用所需的键过滤字典,在本例中,
apple
您甚至可以将此键设置为变量,并用变量替换
apple
。作为过滤器的返回,您将获得一个带有提供键的过滤值数组。现在只需检查其计数是否大于0,这意味着提供的键存在一个值。如果它在那里,则按其他值递增,然后使用键创建一个新值

var fruitCount : [String : Int] = ["apple" : 14, "orange" : 3, "grape" : 6];

func addFruit( FruitName name : String ) {
    for (fruitName , count) in fruitCount {
        if ( fruitName == name ) {
            fruitCount[name]! += 1 // fruitCount[name] return optional(Int) so, unwrap force!
            return
        }
    }
    fruitCount[name] = 1
}

addFruit(FruitName: "apple")

addFruit(FruitName: "kiwi")

print(fruitCount)
我们可以看到


[“橙色”:3,“苹果”:15,“葡萄”:6,“猕猴桃”:1]

过滤的
有什么意义?字典可以有键,也可以没有键,可以通过其他方式进行检查。实际上,带
过滤的
if
的6行可以是
水果[“apple”]=(水果[“apple”?-0)+1
。迭代
字典
查找键的值是超冗余的。只需使用字典下标并检查结果是否为nil,而不是使用
O(N)
进行迭代,您将得到
O(log(N))
在哈希表中进行搜索。