Как заказать массив различных дат по дням недели в Swift - PullRequest
0 голосов
/ 06 июля 2019

У меня есть массив с большим количеством различных дат в Swift, и мне нужно упорядочить их по дням недели (или, что еще лучше, разбить их каждый на новый массив, один со всеми датами на понедельник, вторник ...). Какой способ лучшесделать это?

Ответы [ 2 ]

1 голос
/ 06 июля 2019

Если вам не важно, на какой неделе даты и только дни недели, вы можете использовать Dictionary(grouping:by:), чтобы превратить массив дат в [Int: [Date]]:

func weekDay(of date: Date) -> Int {
    return Calendar.current.component(.weekday, from: date)
}
let weekDays = Dictionary(grouping: dates, by: weekDay)
print(weekDays)

Например, weekDays[7] предоставит вам все даты, которые находятся в субботу, или nil, если в субботу не будет дат.

1 голос
/ 06 июля 2019

Сначала вы должны получить день недели для каждого дня:

let dates: [Date] = ...
let datesWithWeekday: [(date: Date, weekday: Int)] = dates.map {
   let weekday = Calendar.current.component(.weekday, from: $0)
   return (date: $0, weekday: weekday)
}

Тогда вы можете делать с ней все, что захотите:

var datesPerWeekday: [Int: [Date]] = [:]
for (date, weekday) in datesWithWeekday {
    datesPerWeekday[weekday, default: []].append(date)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...