SortedDictionary

public struct SortedDictionary<Key, Value> : DictionaryCollection where Key : Comparable

A collection whose elements are key and value pairs, sorted by keys.

SortedDictionary is implemented using Red-Black Tree, so can perform insertion, search, deletion operations in logarithmic time.

Unlike Dictionary.Values, SortedDictionary.Values doesn’t conform to MutableCollection.

Example

let countries = ["Singapore", "Canada", "Sweden", "Egypt", "Croatia"]
var d1 = SortedDictionary(grouping: countries) {
    country in String(country.first!)
}
print(d1["C"]!) // ["Canada", "Croatia"]
print(d1) // ["C": ["Canada", "Croatia"], "E": ["Egypt"], "S": ["Singapore", "Sweden"]]

d1["G", default: []].append("Greece")
d1["E", default: []].append("Ecuador")
print(d1) // ["C": ["Canada", "Croatia"], "E": ["Egypt", "Ecuador"], "G": ["Greece"], "S": ["Singapore", "Sweden"]]

let d2 = d1.compactMapValues {
    v in v.count > 1 ? v.map { $0.uppercased() } : nil
}
print(d2) // ["C": ["CANADA", "CROATIA"], "E": ["EGYPT", "ECUADOR"], "S": ["SINGAPORE", "SWEDEN"]]
  • The element type of a SortedDictionary: a tuple containing an individual key-value pair.

    Declaration

    Swift

    public typealias Element = (key: Key, value: Value)
  • Creates an empty SortedDictionary.

    Declaration

    Swift

    @inlinable
    @inline(__always)
    public init()
  • Creates a new SortedDictionary, initializing its contents with the given key and value pairs keysAndvalues.

    let keys_and_values = [("c", 3), ("b", 2), ("d", 4), ("a", 1)]
    let d = SortedDictionary(uniqueKeysWithValues: keys_and_values)
    // ["a": 1, "b": 2, "c": 3, "d": 4]
    

    Precondition

    Keys must be unique.

    Declaration

    Swift

    @inlinable
    public init<S: Sequence>(uniqueKeysWithValues keysAndValues: S)
        where S.Element == (Key, Value)

    Parameters

    keysAndValues

    A sequence of key and value pairs.

    Return Value

    A new SortedDictionary initialized with the elements of keysAndValues.

  • Creates a new SortedDictionary, initializing its contents with the given key and value pairs keysAndValues, eliminating values that have duplicate key using closure combine.

    let keys_and_values = [("b", 2), ("a", 1), ("a", 3), ("b", 4)]
    let d1 = SortedDictionary(keys_and_values) { old, _ in old }
    // ["a": 1, "b": 2]
    let d2 = SortedDictionary(keys_and_values) { _, new in new }
    // ["a": 3, "b": 4]
    

    Declaration

    Swift

    @inlinable
    public init<S: Sequence>(
        _ keysAndValues: S,
        uniquingKeysWith combine: (Value, Value) throws -> Value) rethrows
        where S.Element == (Key, Value)

    Parameters

    keysAndValues

    A sequence of key and value pairs.

    combine

    A closure that is called with the old and new values for duplicate key.

  • Creates a new SortedDictionary, initializing its contents with the given values and its key retrieving from closure keyForValue.

    let countries = ["Singapore", "Canada", "Sweden", "Egypt", "Croatia"]
    let countries_by_first_letter =
        SortedDictionary(grouping: countries) {
            country in String(country.first!)
        }
    // ["C": ["Canada", "Croatia"], "E": ["Egypt"],
    //  "S": ["Singapore", "Sweden"]]
    

    Declaration

    Swift

    @inlinable
    public init<S: Sequence>(
        grouping values: S, by keyForValue: (S.Element) throws -> Key) rethrows
        where Value == [S.Element]

    Parameters

    values

    A sequence of values.

    keyForValue

    A closure that is called with each element in values and returns its key.

  • Updates the value associated with the key. If the SortedDictionary does not contain element whose key is equivalent to key, inserts key and value pair.

    Complexity

    O(log n), where n is the length of the SortedDictionary.

    Declaration

    Swift

    @discardableResult
    @inlinable
    public mutating func updateValue(
        _ value: Value, forKey key: Key) -> Value?

    Parameters

    value

    The new value for key.

    key

    The key for value.

    Return Value

    If the new element was inserted, nil, otherwise the old value.

  • Merges key and value pairs into the SortedDictionary, eliminating values that have duplicate key using closure combine.

    Complexity

    O(n * log(m + n)), where m is the length of the SortedDictionary and n is the length of the keysAndValues.

    Declaration

    Swift

    @inlinable
    public mutating func merge<S: Sequence>(
        _ keysAndValues: S,
        uniquingKeysWith combine: (Value, Value) throws -> Value) rethrows
        where S.Element == (Key, Value)

    Parameters

    keysAndValues

    A sequence of key and value pairs.

    combine

    A closure that is called with the old and new values for duplicate key.

  • Merges the other SortedDictionary into the SortedDictionary, eliminating values that have duplicate key using closure combine.

    Complexity

    O(m + n), where m is the length of this SortedDictionary and n is the length of the other SortedDictionary.

    Declaration

    Swift

    @inlinable
    public mutating func merge(
        _ other: SortedDictionary,
        uniquingKeysWith combine: (Value, Value) throws -> Value) rethrows

    Parameters

    other

    An other SortedDictionary.

    combine

    A closure that is called with the old and new values for duplicate key.

  • Creates a new SortedDictionary by merging this SortedDictionary and the given sequence, eliminating values that have dupliacte key using closure combine.

    Complexity

    O(n * log(n)), where n is the length of the resulting SortedDictionary.

    Declaration

    Swift

    @inlinable
    public func merging<S: Sequence>(
        _ other: S,
        uniquingKeysWith combine: (Value, Value) throws -> Value) rethrows
        -> SortedDictionary where S.Element == (Key, Value)

    Parameters

    keysAndValues

    A sequence of key and value pairs.

    combine

    A closure that is called with the old and new values for duplicate key.

  • Creates a new SortedDictionary by merging the SortedDictionary and the other SortedDictionary, eliminating values that have dupliacte key using closure combine.

    Complexity

    O(m + n), where m is the length of this SortedDictionary and n is the length of the other SortedDictionary.

    Declaration

    Swift

    @inlinable
    public func merging(
        _ other: SortedDictionary,
        uniquingKeysWith combine: (Value, Value) throws -> Value) rethrows
        -> SortedDictionary

    Parameters

    other

    An other SortedDictionary.

    combine

    A closure that is called with the old and new values for duplicate key.

  • Accesses the value for the specified key.

    If you assign nil to the value for the specified key, the element whose key is equivalent to key is deleted.

    Complexity

    O(log n), where n is the length of this SortedDictionary.

    Declaration

    Swift

    @inlinable
    public subscript(key: Key) -> Value? { get set }

    Parameters

    key

    The key for the value.

    Return Value

    The value for the specified key if the element exists in this SortedDictionary, otherwise nil.

  • Accesses the value for the specified key.

    If the SortedDictionary doesn’t contain the element whose key is equivalent to key, the key and defaultValue pair is inserted into the SortedDictionary.

    Complexity

    O(log n), where n is the length of this SortedDictionary.

    Declaration

    Swift

    @inlinable
    public subscript(
        key: Key,
        default defaultValue: @autoclosure () -> Value) -> Value

    Parameters

    key

    The key for the value.

    default

    The default value for the key.

    Return Value

    The value for the specified key if the element exists in this SortedDictionary, or defaultValue.

  • Creates a new SortedDictionary whose values are transformed by the given closure transform.

    Complexity

    O(n), where n is the length of the SortedDictionary.

    Declaration

    Swift

    @inlinable
    public func mapValues<T>(
        _ transform: (Value) throws -> T) rethrows
        -> SortedDictionary<Key, T>

    Parameters

    transform

    A closure that is called with each value in this SortedDictionary and returns a transformed value.

    Return Value

    A SortedDictionary whose values are transformed.

  • Creates a new SortedDictionary whose values are transformed by the given closure transform and the results aren’t nil.

    Complexity

    O(m + n), where m is the length of the original SortedDictionary and n is the length of the resulting SortedDictionary.

    Declaration

    Swift

    @inlinable
    public func compactMapValues<T>(
        _ transform: (Value) throws -> T?) rethrows
        -> SortedDictionary<Key, T>

    Parameters

    transform

    A closure that is called with each value in this SortedDictionary and returns an optional transformed value.

    Return Value

    A SortedDictionary whose values are non-nil transformed.

  • Creates a new SortedDictionary whose only elements for which the given closure isIncluded returns true.

    Complexity

    O(m + n), where m is the length of the original SortedDictionary and n is the length of the resulting SortedDictionary.

    Declaration

    Swift

    @inlinable
    public func filter(_ isIncluded: (Element) throws -> Bool) rethrows
        -> SortedDictionary

    Parameters

    isIncluded

    A closure that is called with each element in this SortedDictionary and returns whether the element should be included in the result.

    Return Value

    A SortedDictionary whose elements for which the given closure isIncluded returns true.

  • Removes the element for the specified key.

    Complexity

    O(log n), where n is the length of this SortedDictionary.

    Declaration

    Swift

    @discardableResult
    @inlinable
    @inline(__always)
    public mutating func removeValue(forKey key: Key) -> Value?

    Parameters

    key

    The key for the element to remove.

    Return Value

    If the element for the specified key was removed, returns the value of the element, otherwise nil.

  • Removes the element for the specified index.

    Complexity

    Amortized O(1).

    Declaration

    Swift

    @discardableResult
    @inlinable
    @inline(__always)
    public mutating func remove(at position: Index) -> Element

    Parameters

    position

    The index for the element to remove.

    Return Value

    If the element for the specified key was removed, returns the value of the element, otherwise nil.

  • Removes all elements in the SortedDictionary.

    Complexity

    O(n), where n is the length of this SortedDictionary.

    Note

    keepingCapacity is always ignored.

    Declaration

    Swift

    @inlinable
    @inline(__always)
    public mutating func removeAll(
        keepingCapacity keepCapacity: Bool = false)

    Parameters

    keepCapacity

    The value is always ignored.

  • Returns an index to the element with key not less than key in the SortedDictionary.

    Complexity

    O(log n), where n is the length of this SortedDictionary.

    Declaration

    Swift

    @inlinable
    @inline(__always)
    public func lowerBound(of key: Key) -> Index

    Parameters

    key

    the key for the element.

    Return Value

    The index to the element if it exists in the sorted dictionary, otherwise endIndex.

  • Returns an index to the element with key greater than key in the SortedDictionary.

    Complexity

    O(log n), where n is the length of this SortedDictionary.

    Declaration

    Swift

    @inlinable
    @inline(__always)
    public func upperBound(of key: Key) -> Index

    Parameters

    key

    the key for the element.

    Return Value

    The index to the element if it exists in this SortedDictionary, otherwise endIndex.

  • Updates the value of the element for the specified index.

    Complexity

    O(1).

    Declaration

    Swift

    @discardableResult
    @inlinable
    @inline(__always)
    public mutating func updateValue(_ value: Value, at position: Index)
        -> Value

    Parameters

    value

    The new value for key.

    position

    The index for the element to update.

    Return Value

    The old value for key.

  • Accesses the value for the specified key.

    If you assign nil to the value for the specified key, the element whose key is equivalent to key is deleted.

    Complexity

    O(log n), where n is the length of this SortedDictionary. If the new element for key is located either at, or just before, or just after hint, amortized O(1).

    Declaration

    Swift

    @inlinable
    public subscript(key: Key, hint hint: Index) -> Value? { get set }

    Parameters

    key

    The key for the value.

    hint

    The closest position where the element for key is located.

    Return Value

    The value for the specified key if the element exists in this SortedDictionary, otherwise nil.

  • Accesses the value for the specified key.

    If the SortedDictionary doesn’t contain the element whose key is equivalent to key, the key and defaultValue pair is inserted into the SortedDictionary.

    Complexity

    O(log n), where n is the length of this SortedDictionary. If the new element for key is located either at, or just before, or just after hint, amortized O(1).

    Declaration

    Swift

    @inlinable
    public subscript(
        key: Key, hint hint: Index,
        default defaultValue: @autoclosure () -> Value) -> Value

    Parameters

    key

    The key for the value.

    hint

    The closest position where the element for key is located.

    default

    The default value for the key.

    Return Value

    The value for the specified key if the element exists in this SortedDictionary, or defaultValue.

  • Creates a new SortedDictionary, initializing its contents with the given Dictionary.

    Declaration

    Swift

    @inlinable
    @inline(__always)
    public init(_ dictionary: Dictionary<Key, Value>)

    Parameters

    dictionary

    A Dictionary.

    Return Value

    A new dictionary initialized with the elements of dictionary.

  • Declaration

    Swift

    @inlinable
    @inline(__always)
    public static func == (
        lhs: SortedDictionary<Key, Value>, rhs: SortedDictionary<Key, Value>)
        -> Bool
  • Declaration

    Swift

    @inlinable
    @inline(__always)
    public static func < (
        lhs: SortedDictionary, rhs: SortedDictionary) -> Bool
  • Declaration

    Swift

    @inlinable
    @inline(__always)
    public func hash(into hasher: inout Hasher)
  • A view of keys in a SortedDictionary.

    See more

    Declaration

    Swift

    public struct Keys
  • A collection whose keys in the SortedDictionary.

    Declaration

    Swift

    @inlinable
    public var keys: Keys { get }
  • A view of values in a SortedDictionary.

    See more

    Declaration

    Swift

    public struct Values
  • A collection whose values in the SortedDictionary.

    Declaration

    Swift

    @inlinable
    public var values: Values { get }
  • Declaration

    Swift

    public struct Iterator : IteratorProtocol
  • Declaration

    Swift

    @inlinable
    @inline(__always)
    public func makeIterator() -> Iterator
  • Returns the element whose key is the minimum in the SortedDictionary.

    Complexity

    O(1).

    Declaration

    Swift

    @warn_unqualified_access
    @inlinable
    @inline(__always)
    public func min() -> Element?

    Return Value

    The element whose key is the minimum in the sorted dictionary. If the SortedDictionary has no elements, returns nil.

  • Returns the element whose key is the maximum in the SortedDictionary.

    Complexity

    O(1).

    Declaration

    Swift

    @warn_unqualified_access
    @inlinable
    @inline(__always)
    public func max() -> Element?

    Return Value

    The element that key is the maximum in the sorted dictionary. If the SortedDictionary has no elements, returns nil.

  • Returns the sorted elements of the SortedDictionary.

    Complexity

    O(n), where n is the length of this SortedDictionary.

    Declaration

    Swift

    @inlinable
    @inline(__always)
    public func sorted() -> [Element]

    Return Value

    The sorted elements of the SortedDictionary.

  • Declaration

    Swift

    public struct Index : Comparable, Hashable
  • Declaration

    Swift

    @inlinable
    public var startIndex: Index { get }
  • Declaration

    Swift

    @inlinable
    public var endIndex: Index { get }
  • Declaration

    Swift

    @inlinable
    public subscript(position: Index) -> Element { get }
  • Declaration

    Swift

    @inlinable
    @inline(__always)
    public func index(after index: Index) -> Index
  • Undocumented

    Declaration

    Swift

    @inlinable
    @inline(__always)
    public func index(forKey key: Key) -> Index?
  • Removes the element whose key is minimum, and returns the element.

    Complexity

    Amortized O(1).

    Declaration

    Swift

    @inlinable
    @inline(__always)
    public mutating func popFirst() -> Element?

    Return Value

    If this SortedDictionary isn’t empty, the element whose key is minimum, otherwise nil.

  • Declaration

    Swift

    @inlinable
    public var count: Int { get }
  • Declaration

    Swift

    @inlinable
    public var isEmpty: Bool { get }
  • Declaration

    Swift

    @inlinable
    @inline(__always)
    public func index(before index: Index) -> Index
  • Removes the element whose key is maximum, and returns the element.

    Complexity

    Amortized O(1).

    Declaration

    Swift

    @inlinable
    @inline(__always)
    public mutating func popLast() -> Element?

    Return Value

    If this SortedDictionary isn’t empty, the element whose key is maximum, otherwise nil.

  • Declaration

    Swift

    public func encode(to encoder: Encoder) throws
  • Declaration

    Swift

    public init(from decoder: Decoder) throws
  • Declaration

    Swift

    public var description: String { get }
  • Declaration

    Swift

    public var debugDescription: String { get }
  • Declaration

    Swift

    public var customMirror: Mirror { get }