使用随机整数数组过滤字典以制作新字典

Filtering Dictionary with an array of random Ints to make a new dict

所以我有这个方法来获取 1-9 之间的随机整数数组,1 到 7 之间的随机次数。

let n = arc4random_uniform(7) + 1
var arr: [UInt32] = []
for _ in 0 ... n {
    var temp = arc4random_uniform(9) + 1
    while arr.contains(temp) {
        temp = arc4random_uniform(9) + 1
    }
    print(temp)
    arr.append(temp)
}
print(arr)

这样我就得到了一个像 [1,4,2] 或 [5,7,3,4,6] 这样的数组。而且我有一种方法可以将另一个字符串数组转换为枚举字典。

    var someArray: [String] = ["War", "Peanuts", "Cats", "Dogs", "Nova", "Bears", "Pigs", "Packers", "Mango", "Turkey"]

extension Collection  {
    var indexedDictionary: [Int: Element] {
        return enumerated().reduce(into: [:]) { [=11=][.offset] = .element }
    }
}
let dict1 = someArray.indexedDictionary
print(dict1)

给我索引字典

[1:"War", 2:"Peanuts",..etc]

我的问题是使用随机数组的 Ints 如何创建仅包含这些键及其值的新字典?

例如 arr = [3,1,5] 我如何获得

的新词典

[3:"dogs", 1:"Peanuts",5:"Bears"].

应该这样做:

let finalDict = dict1.filter { arr.contains([=10=].key) }

更新:

您甚至可以更进一步,跳过整个字符串到数组的映射。所以删除

extension Collection  {
    var indexedDictionary: [Int: Element] {
        return enumerated().reduce(into: [:]) { [=11=][.offset] = .element }
    }
}
let dict1 = someArray.indexedDictionary
print(dict1)

然后使用这个:

Swift 4:

let finalArray = someArray.enumerated().flatMap { arr.contains([=12=].offset) ? [=12=].element : nil }

Swift 4.1:

let finalArray = someArray.enumerated().compactMap { arr.contains([=13=].offset) ? [=13=].element : nil }

更新 2:

如果你最终需要字典而不是数组,使用这个:

Swift 4:

let finalDict = someArray.enumerated().flatMap { randomInts.contains([=14=].offset) ? ([=14=].offset, [=14=].element) : nil }.reduce(into: [:]) { [=14=][.0] = .1 }

Swift 4.1:

let finalDict = someArray.enumerated().compactMap { randomInts.contains([=15=].offset) ? ([=15=].offset, [=15=].element) : nil }.reduce(into: [:]) { [=15=][.0] = .1 }