You may build something custom.
Just for illustration:
typealias FruitDict = [String: (String, Int)]
let myFruitBasket : FruitDict = ["apple":("red", 1), "banana": ("yellow", 2), "budbeeri": ("dark violet", 3), "chikoo": ("brown", 4)]
func subBasket(_ basket: FruitDict, range: ClosedRange<Int>) -> [String: String] {
let filtered = basket.filter {
$0.value.1 >= range.lowerBound && $0.value.1 <= range.upperBound
}
let sub = filtered.mapValues{ value in value.0 }
return sub
}
let sub: [String: String] = subBasket(myFruitBasket, range: 1...3)
print(sub)
print("keys: ", sub.keys)
print("values", sub.values)
You get:
["banana": "yellow", "apple": "red", "budbeeri": "dark violet"]
keys: ["banana", "apple", "budbeeri"]
values ["yellow", "red", "dark violet"]
Of course, that's not ordered (order does not mean anything with dictionaries), as Quinn explained. But if you plan to use the result as a dictionary, that doesn't matter.
To get ordered, you have to convert to array. Or you can compute:
let sortedKeys = sub.keys.sorted()
print("sorted keys: ", sortedKeys)
for key in sortedKeys {
print("sorted values", sub[key] ?? "")
}
And get
sorted keys: ["apple", "banana", "budbeeri"]
values red
values yellow
values dark violet