检查数组中的多个值

时间:2018-08-29 04:54:25

标签: swift struct

我有一个结构:

struct Info {
    var name: String = ""
    var number = Int()
    var count = Int()
}

var infoProvided : [Info] = []    

我要检查名称和号码是否已经填写,如果是,请更新计数器。如果姓名和数字均未填写,我想附加值。
像这样:

//Check if item allready exists, if not append to array
if let index = infoProvided.index(where: { $0.name == name }) && infoProvided.index(where: { $0.number == number })   {
    infoProvided[index].count += counter

} else {
    infoProvided.append(Info(name: name, number: number, count: counter))
}    

上述解决方案不起作用:

  

“可选类型'Array.Index?” (也称为“可选”)不能用作布尔值;相反,请测试'!= nil'”

如何检查两个值是否存在?

2 个答案:

答案 0 :(得分:0)

您似乎想使用匹配的名称和编号来更新Info实例。

为此,您需要在一次对index(where:)的调用中检查两者。

if let index = infoProvided.index(where: { $0.name == name && $0.number == number }) {
    infoProvided[index].count += counter
} else {
    infoProvided.append(Info(name: name, number: number, count: counter))
}

答案 1 :(得分:0)

index(where:)重复查找相同的对象会非常低效(每个调用都是O(n)线性搜索)。最好使用Dictionary,它也可以从根本上简化您的合并/添加逻辑:

struct Info { // TODO: NAME ME BETTER
    let name: String
    let number: Int  // TODO: NAME ME BETTER
}

...代码中的其他地方:

var infoCounts = [Info: Int]

func addNewInfo(name: String, number: Int, count: Int) {
    infoCounts[Info(name: name, number: number), default: 0] += count
}