Skip to content

Instantly share code, notes, and snippets.

@huy-luvapay
huy-luvapay / Sequence+GroupByDate.swift
Created July 11, 2019 17:23 — forked from ElegyD/Sequence+GroupByDate.swift
Group a Swift Model by date with auto sorting and asc/desc support (Swift 3) E.g.: for a UITableView with sections
extension Sequence {
func groupSort(ascending: Bool = true, byDate dateKey: (Iterator.Element) -> Date) -> [[Iterator.Element]] {
var categories: [[Iterator.Element]] = []
for element in self {
let key = dateKey(element)
guard let dayIndex = categories.index(where: { $0.contains(where: { Calendar.current.isDate(dateKey($0), inSameDayAs: key) }) }) else {
guard let nextIndex = categories.index(where: { $0.contains(where: { dateKey($0).compare(key) == (ascending ? .orderedDescending : .orderedAscending) }) }) else {
categories.append([element])
continue
}