Skip to content

Instantly share code, notes, and snippets.

@mkhl
Created November 10, 2015 09:50
Show Gist options
  • Save mkhl/ffb2aa927541c39317d3 to your computer and use it in GitHub Desktop.
Save mkhl/ffb2aa927541c39317d3 to your computer and use it in GitHub Desktop.
extension CollectionType {
func indexBy<Key: Hashable>(keyFunction: (Generator.Element) -> Key) -> [Key: [Generator.Element]] {
var map: [Key: [Generator.Element]] = [:]
for element in self {
let key = keyFunction(element)
var elements = map[key] ?? []
elements.append(element)
map[key] = elements
}
return map
}
func indexByAll<Key: Hashable, Keys: SequenceType where Keys.Generator.Element == Key>(keyFunction: (Generator.Element) -> Keys) -> [Key: [Generator.Element]] {
var map: [Key: [Generator.Element]] = [:]
for element in self {
for key in keyFunction(element) {
var elements = map[key] ?? []
elements.append(element)
map[key] = elements
}
}
return map
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment