-
Notifications
You must be signed in to change notification settings - Fork 130
/
Copy pathDictionaryExtensions.swift
32 lines (28 loc) · 1.11 KB
/
DictionaryExtensions.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/*
This source file is part of the Swift.org open source project
Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
Licensed under Apache License v2.0 with Runtime Library Exception
See http://swift.org/LICENSE.txt for license information
See http://swift.org/CONTRIBUTORS.txt for Swift project authors
*/
extension Dictionary {
/// Returns a new dictionary containing the keys of this dictionary with the
/// values transformed by the given closure, if transformed is not nil.
public func spm_flatMapValues<T>(_ transform: (Value) throws -> T?) rethrows -> [Key: T] {
var transformed: [Key: T] = [:]
for (key, value) in self {
if let value = try transform(value) {
transformed[key] = value
}
}
return transformed
}
}
extension Array {
/// Create a dictionary with given sequence of elements.
public func spm_createDictionary<Key: Hashable, Value>(
_ uniqueKeysWithValues: (Element) -> (Key, Value)
) -> [Key: Value] {
return Dictionary(uniqueKeysWithValues: self.map(uniqueKeysWithValues))
}
}