2015-07-12 25 views
-1

在我的应用程序中,我有2个正在使用的数组,一个存储分数值作为Integer的数组,以及另一个数组以格式“mm/dd/yy”存储日期。这些数组不断追加,并且这些数组的索引相互对应,例如,日期数组的索引0对应于分数数组的索引0。我希望这些数组在第二个屏幕加载时变成字典(这些是全局变量)。例如,这些是每个数组中值的类型。在Xcode 6,swift?中将2个数组合并成一个字典,并带有相应的索引值)

score == [1,2,3,4,5,6,7,8,9] 
dates == ["7/12/15","7/12/15","7/12/15","7/12/15","7/13/15","7/13/15","7/13/15","7/13/15"," 7/14/15"] 

我想要发生的事情是,在viewDidLoad()时,会创建它。

var scoreDatesDictionary = [ 
"7/12/15": [1,2,3,4] 
"7/13/15": [5,6,7,8] 
"7/14/15": [9] 
] 

其本质上,两个数组有相应的值,(firstArray [0])对应于(secondArray [0])。我试图让它在第二个Array(日期)中,相同的字符串在字典中与它们相应的索引值匹配。我可能没有太大意义,但我提供的示例代码应该可以工作。我花了很多时间处理这个问题,但我找不到解决方案。

+0

您没有提供任何示例代码,所以我不确定您期望的工作是什么。 – nhgrif

回答

0

工作过@狮子座的正确答案,这里是一个版本,利用的enumerate零合并运算??更清洁做到这一点:

For Swift 1.2:

let score = [1,2,3,4,5,6,7,8,9] 
let dates = ["7/12/15","7/12/15","7/12/15","7/12/15","7/13/15","7/13/15","7/13/15","7/13/15"," 7/14/15"] 
var dic = [String:[Int]]() 

for (index, date) in enumerate(dates) { 
    dic[date] = (dic[date] ?? []) + [score[index]] 
} 
print(dic) // prints "[7/12/15: [1, 2, 3, 4], 7/14/15: [9], 7/13/15: [5, 6, 7, 8]]" 

对于雨燕2.0,你需要使用dates.enumerate()代替。

+0

你的代码工作方式并不像预期的那样工作。当用户点击游戏的结束按钮时,它会将日期和分数存储在阵列日期和分数内。当我打印新字典(dic)时,它会以不同的方式出现。日期值很好,但当有多个相同的日期值时,日期值的数量乘以score数组中的数字数量。如果日期= [7/12/15,7/12/15],得分= [100,200],则dic = [7/12/15:100,200,100,200]。你知道一个解决办法吗?谢谢!我检查了其他答案,并且Leo的答案产生了同样的问题。 –

+0

这听起来像是你第二次运行'for loop'。你是否记得重新初始化'dic'来清除它?做一个'dic = [:]'把它设回空。 – vacawama

1
let score = [1,2,3,4,5,6,7,8,9,] 
    let dates = ["7/12/15","7/12/15","7/12/15","7/12/15","7/13/15","7/13/15","7/13/15","7/13/15"," 7/14/15"] 
    var dic = [String:[Int]]() 
    for var index=0;index < dates.count; index++ { 
     let key = dates[index]; 
     var value = dic[key] 
     if value == nil{ 
      dic[key] = [score[index]] 
     }else{ 
      value!.append(score[index]) 
      dic[key] = value 
     } 
    } 
    println(dic) 

这将记录

[7/12/15: [1, 2, 3, 4], 7/14/15: [9], 7/13/15: [5, 6, 7, 8]] 
+0

你的速度更快:(我用这个语法挣扎着'var dic = [String:[Int]]()'...感谢你的反馈;) – luk2302

+0

请使用Swift样式for循环。 '在0 .. nhgrif

1
func zipToDict< 
    S0 : SequenceType, 
    S1 : SequenceType where 
    S0.Generator.Element : Hashable 
    >(keys: S0, values: S1) -> [S0.Generator.Element:[S1.Generator.Element]] { 
    var dict: [S0.Generator.Element:[S1.Generator.Element]] = [:] 
    for (key, value) in zip(keys, values) { 
     dict[key] = (dict[key] ?? []) + [value] 
    } 
    return dict 
} 

let score = [1,2,3,4,5,6,7,8,9] 
let dates = ["7/12/15","7/12/15","7/12/15","7/12/15","7/13/15","7/13/15","7/13/15","7/13/15"," 7/14/15"] 

print(zipToDict(dates, score)) // [7/12/15: [1, 2, 3, 4], 7/14/15: [9], 7/13/15: [5, 6, 7, 8]] 
相关问题