因此,我尝试使用最新的Swift在Xcode中添加两个[String : Int]
字典的值。我的代码如下所示。这两个词典的键都从q1
到q23
,并附加值。这就是为什么随机数在23处停止的原因。键q1
在此函数中没有用(这就是为什么随机数从2开始)的原因。字典值是由另一个视图控制器在seview期间给此viewController给出的,我不手动分配它们。字典中的值不需要是可选的,因为它们将被指定为可访问此viewController的值。
我已经使用了一个小时,但是我无法理解它们所适用的reduce,combin或map函数,在我只想添加时做的如此复杂的事情似乎忽略了一个更简单的方法
var p1Pre:[String:Int] = [“q1” : 1]
var p2Pre:[String:Int] = [“q1” : 1]
var combPre:[String:Int] = [“q1” : 0]
var pick = 0
// generates random number 2-23
func pickRandom(){
pick = Int.random(in:2...23)
}
func addPrefs(){
// this is where i'm having trouble
combPre[“q\(pick)] = p1Pre[“q\(pick)”] + p2Pre[“q\(pick)”]
print(combPre[“q\(pick)”]
// I get an error at the plus sign here
}
我试图在两个字典(p1Pre
和p2Pre
)中的特定键处添加值,结果将存储在combPre中。我想构建一个函数,所以如果p1Pre[“q2”] == 1
和p2Pre[“q2”] == 2
,那么combPre[“q2”] = 3
。
我在加号“binary operator “+” cannot be applied to two ‘Int?’ Operands"
上遇到错误。我将如何进行这项工作?谢谢
答案 0 :(得分:2)
使用下标访问字典时,表达式的类型始终是值类型的可选,因为正在使用的键可能在字典中不存在。您不能将两个可选的Int
一起添加。
您需要考虑以下情况:“如果字典中不存在键“q\(pick)”
,该怎么办?”,并相应地解开两个可选键。
我认为,在键不存在的情况下,明智的做法是仅使用值0
,因为它是加法的标识:
combPre[“q\(pick)] = (p1Pre[“q\(pick)”] ?? 0) + (p2Pre[“q\(pick)”] ?? 0)
如果您 100%确定该密钥将存在,则可以考虑强制展开该密钥:
combPre[“q\(pick)] = p1Pre[“q\(pick)”]! + p2Pre[“q\(pick)”]!
仅当您确定 100%时才这样做,例如,“如果密钥不存在,则必定发生了某些非常糟糕的事情”。