2015-07-12 97 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]] 
相關問題