2016-10-28 96 views
0

對於有經驗的人來說,這一定很簡單。我所要做的就是在每個月的日子裏使用嵌套的for -loops在一系列字典中加上他們各自的日子。控制嵌套for循環Swift 3

例如:

我創建陣列的一個實例,像這樣:

let arrayOfDictionaries:[[String:Any]] = [[String:Any]]() 

我後來創建的星期幾的數組:

let daysOfWeek = ["Monday","Tuesday"..."Sunday"] 

然後,我有一個爲10月31日的for循環,關於一週的日子裏面有for循環:

for i in 1...31 { 
    for day in daysOfWeek{ 
    arrayOfDictionaries.append(["Monday",1]) 
    .... 
    } 
} 

最後我想結束了arrayOfDictionaries看上去就像這樣(假設月將開始在星期一):

[ 「星期一」,1],[ 「星期二」,2] ... [「星期一」,8],[「星期二」,9] ... [「星期一」,16],[「星期二」,17] ...等等直到第31]

任何幫助將不勝感激。

+1

'[[「Monday」,1],[ ,2] ...'我希望你不要以爲這是一組字典。它是一個數組數組。因此,將'arrayOfDictionaries'輸入爲[[[String:Any]]'沒有任何意義。你的問題也沒有;完全不清楚你想要做什麼。你甚至知道嗎? (你也不能附加到用'let'聲明的東西。) – matt

+0

你究竟在做什麼?這個數據結構似乎令人震驚。 – Alexander

+0

兩種答案都可以做你需要的嗎?如果沒有,請澄清你的問題。如果其中一個答案確實解決了您的問題,請通過接受其中一個答案來表明這一點。 – rmaddy

回答

1

這可以使用模運算符來解決!

var arrayOfDictionaries:[[String:Any]] = [[String:Any]]() 
let daysOfWeek = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"] 


for i in 1...31 { 
    arrayOfDictionaries.append([daysOfWeek[((i - 1) % 7)]:i]) 
} 
+0

這僅適用於發生在星期一的月份。 – rmaddy

+0

@rmaddy OP就是這麼想的。他可以採取這種邏輯並將其應用於他的需要,如果他還將使用其他月份。 –

+0

但2016年10月1日是星期六,而不是星期一。 – rmaddy

0

有幾個問題。

  1. 你的字典的數組應該是[[Int:String]]既然你想關鍵是這個月的一天,你想它的價值是對應於該日期是星期幾。
  2. 不要建立自己的工作日清單。 DateFormatter提供了這樣一個列表。
  3. 您首先需要計算您正在使用的月份中的第一天的週日。
  4. 你不需要嵌套循環。

鑑於此,下面的代碼應該是你在找什麼:

let day = 1 
let month = 10 
let year = 2016 
var components = DateComponents() 
components.year = year 
components.month = month 
components.day = day 
let date = Calendar.current.date(from: components) // date for October 1, 2016 
let dow = Calendar.current.component(.weekday, from: date!) // 7 for Saturday 

let daysOfWeek = DateFormatter().weekdaySymbols as [String] // Get the localized list of weekdays 

var arrayOfDictionaries:[[Int:String]] = [] 
for i in 1...31 { 
    arrayOfDictionaries.append([i : daysOfWeek[(i + dow - 2) % 7]]) 
} 

print(arrayOfDictionaries) 

輸出是:

[1: 「星期六」],[2:「週日「],[3:」星期一「],[4:」星期二「],[5:」星期三「],[6:」星期四「],[7:」星期五「 ],[9:「星期日」],[10:「星期一」],[11:「星期二」],[12:「星期三」],[13:「星期四」],[14: [15:「星期六」],[16:「星期天」],[17:「星期一」],[18:「星期二」],[19:「星期三」],[20:「星期四」 :「星期五」] ,[22:「星期六」],[23:「星期天」],[24:「星期一」],[25:「星期二」],[26: 28:「星期五」],[29:「星期六」],[30:「星期天」],[31:「星期一」]]

+0

當然,這也很好地回答了這個問題。謝謝你的幫助! –

+0

如果你已經澄清了你的問題並正確解釋了你需要的東西,那麼你可以節省很多時間。 – rmaddy

+0

我明白了......下次會做! –