[英]Sorting array of Dictionary by weekday name swift3
I want to sort the root array by weekday name. 我想按工作日名称对根数组进行排序。 Like on first index of the root array there should be Sunday, Monday,Tuesday and so on. 就像在根数组的第一个索引上一样,应该是星期日,星期一,星期二等等。
[{
day = Monday;
timingValues = (
{
closeHour = 23;
closeMin = 55;
day = Monday;
id = 2;
openHour = 00;
openMin = 00;
}
);
},
{
day = Tuesday;
timingValues = (
{
closeHour = 00;
closeMin = 11;
day = Tuesday;
id = 4;
openHour = 12;
openMin = 10;
}
);
}, {
day = Sunday;
timingValues = (
{
closeHour = 23;
closeMin = 07;
day = Sunday;
id = 5;
openHour = 11;
openMin = 07;
}
);
}]
Lots of force unwrap, but you can get the idea of comparing, also need to make sure the string is correct, I'm just doing 1 line here as reference, it's not safe, in real code should do optional check. 很多力量打开,但你可以得到比较的想法,还需要确保字符串是正确的,我只是在这里做1行作为参考,它不安全,在实际代码中应该做可选检查。
let dictArray = [["day": "Monday", "timingValues" : 1],
["day" : "Tuesday", "timingValues" : 2],
["day" : "Saturday", "timingValues" : 3],
["day" : "Sunday", "timingValues" : 4]]
let b = dictArray.sorted(by: { DateFormatter().weekdaySymbols.index(of: ($0["day"]! as! String))! < DateFormatter().weekdaySymbols.index(of: ($1["day"]! as! String))! })
Result: 结果:
[["day": "Sunday", "timingValues": 4], ["day": "Monday", "timingValues": 1], ["day": "Tuesday", "timingValues": 2], ["day": "Saturday", "timingValues": 3]]
First of all, the format of Dictionary in your question doesn't match Swift's syntax for that. 首先,你问题中的Dictionary格式与Swift的语法不匹配。 I presume you know it, and you have a proper Swift dictionary with this structure. 我认为你知道它,并且你有一个具有这种结构的正确的Swift字典。 See this reference . 请参阅此参考 。
Next, you should define your custom type for weekday like this (note that week starts with Sunday here): 接下来,您应该像这样定义工作日的自定义类型(请注意,星期从星期日开始):
enum Weekday: Int {
case sunday = 0, monday, tuesday, wednesday, thursday, friday, saturday
}
Make sure you create dictionary using this type as a key for day value. 确保使用此类型创建字典作为日值的键。
Given that you have everything set up properly, you should be able to get sorted array like this: 鉴于你已经正确设置了所有东西,你应该能够像这样得到排序数组:
let sortedArray = initialArray.sorted { (element0, element1) -> Bool in
guard let day0 = element0["day"] as? Weekday, let day1 = element1["day"] as? Weekday else {
// Default behaviour in case you used wrong Weekday type or didn't set it at all
return false
}
return day0 < day1
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.