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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift Collections open source project
//
// Copyright (c) 2022 - 2024 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
//
//===----------------------------------------------------------------------===//
extension TreeDictionary {
/// Returns a new persistent dictionary containing the key-value pairs of this
/// dictionary that satisfy the given predicate.
///
/// - Parameter isIncluded: A closure that takes a key-value pair as its
/// argument and returns a Boolean value indicating whether it should be
/// included in the returned dictionary.
///
/// - Returns: A dictionary of the key-value pairs that `isIncluded` allows.
///
/// - Complexity: O(`count`)
@inlinable
public func filter(
_ isIncluded: (Element) throws -> Bool
) rethrows -> Self {
let result = try _root.filter(.top, isIncluded)
guard let result = result else { return self }
let r = TreeDictionary(_new: result.finalize(.top))
r._invariantCheck()
return r
}
/// Removes all the elements that satisfy the given predicate.
///
/// Use this method to remove every element in the dictionary that meets
/// particular criteria.
/// This example removes all the odd valued items from a
/// dictionary mapping strings to numbers:
///
/// var numbers: TreeDictionary = ["a": 5, "b": 6, "c": 7, "d": 8]
/// numbers.removeAll(where: { $0.value % 2 != 0 })
/// // numbers == ["b": 6, "d": 8]
///
/// - Parameter shouldBeRemoved: A closure that takes an element of the
/// dictionary as its argument and returns a Boolean value indicating
/// whether the element should be removed from the collection.
///
/// - Complexity: O(`count`)
@inlinable
public mutating func removeAll(
where shouldBeRemoved: (Element) throws -> Bool
) rethrows {
// FIXME: Implement in-place reductions
self = try filter { try !shouldBeRemoved($0) }
}
}
|