2016-10-28 31 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

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