2017-05-09 77 views
0

我新编程我只是在操场上玩耍,我试图在词典中循环做一些计算并将它们添加到新字典中,但是我只能添加一个字典值。我不知道为什么。可以再告诉我并指出这一点吗?Swift3循环词典增加值

var name:String? 

var popDict: [String: Array<Double>]? 
var FinalDict: [String: Array<Double>]? 
var mean: Double? 
var elementSideArr: Array<Double>? 

var nameArray = ["Olivia": [1,2,2,2,1,2,1,0.0001,0,1,2], "Amber": [52,52,65,66,57,63,62,0.0001,0,0,0]] 

var doubleArr = [Double]() 

for (key, value) in nameArray{ 

    let thisValue = value 
    let arrayS = thisValue.prefix(7) 
    let slice = arrayS[0...6] 
    let popSideArr = Array(slice) 
    let average: Double = (popSideArr as NSArray).value(forKeyPath: "@avg.self") as! Double 

     mean = average 
    let thatValue = value 
    let arraySS = thatValue.suffix(3) 
    let sslice = arraySS[8...10] 
    elementSideArr = Array(sslice) 


    elementSideArr?.insert(average, at: 0) 


    let dict = ["\(key)": elementSideArr!] 

    for (key,value) in dict{ 

    popDict = dict 

    } 
} 
print(popDict!) 

[ “奥利维亚”:[1.5714285714285714,0.0,1.0,2.0]] //这是唯一的输出,但它应该是2项。

回答

0

问题是在你的内循环中,你正在初始化全新的字典到popDict如果你的字典中有单个键和值对,你也不需要循环。

替换代码行:

let dict = ["\(key)": elementSideArr!] 
for (key,value) in dict{ 
    popDict = dict 
} 

有了:

popDict["\(key)"] = elementSideArr! 

注:没有必要投迅速数组NSArray的计算average你可以简单地使用reduce来得到总数,然后用数组数除总数。

let array = popSideArr as? [Int] ?? [] 
let res = Double(array.reduce(0, +))/Double(popSideArr.count) 
+0

改变你的代码后,我得到了一些unwrapper问题我应该改变什么? – kings077712

+0

@ kings077712您的字典是可选的,因此要么将其声明更改为'var popDict:[String:Array ] = [:]'或更改的行'popDict [“\(key)”] = elementSideArr!'to'popDict? “\(key)”] = elementSideArr!' –

+0

awww我明白了Thx !!!!!学习一些新的东西:D – kings077712