Skip to content

Instantly share code, notes, and snippets.

@MoussaHellal
Created January 7, 2021 18:45
Show Gist options
  • Save MoussaHellal/e38667dc13cff7a4809f37c169c61e29 to your computer and use it in GitHub Desktop.
Save MoussaHellal/e38667dc13cff7a4809f37c169c61e29 to your computer and use it in GitHub Desktop.
extension Sequence {
func group<GroupingType: Hashable>(by key: (Iterator.Element) -> GroupingType) -> [[Iterator.Element]] {
var groups: [GroupingType: [Iterator.Element]] = [:]
var groupsOrder: [GroupingType] = []
forEach { element in
let key = key(element)
if case nil = groups[key]?.append(element) {
groups[key] = [element]
groupsOrder.append(key)
}
}
return groupsOrder.map { groups[$0]! }
}
}
let arrayOfNumbers = [1, 1, 2, 3, 4, 5, 6, 7]
let groupedArray = arrayOfNumbers.group(by: {$0})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment