[英]Sorting array of Dictionary by weekday name swift3
我想按工作日名稱對根數組進行排序。 就像在根數組的第一個索引上一樣,應該是星期日,星期一,星期二等等。
[{
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;
}
);
}]
很多力量打開,但你可以得到比較的想法,還需要確保字符串是正確的,我只是在這里做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))! })
結果:
[["day": "Sunday", "timingValues": 4], ["day": "Monday", "timingValues": 1], ["day": "Tuesday", "timingValues": 2], ["day": "Saturday", "timingValues": 3]]
首先,你問題中的Dictionary格式與Swift的語法不匹配。 我認為你知道它,並且你有一個具有這種結構的正確的Swift字典。 請參閱此參考 。
接下來,您應該像這樣定義工作日的自定義類型(請注意,星期從星期日開始):
enum Weekday: Int {
case sunday = 0, monday, tuesday, wednesday, thursday, friday, saturday
}
確保使用此類型創建字典作為日值的鍵。
鑒於你已經正確設置了所有東西,你應該能夠像這樣得到排序數組:
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.