使用随机Ints数组过滤Dictionary以创建新的dict

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (24)

所以我有这种方法来获得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: [:]) { $0[$1.offset] = $1.element }
    }
}
let dict1 = someArray.indexedDictionary
print(dict1)

给我索引字典

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

我的问题是使用随机数组的Int如何创建一个只包含那些键及其值的新词典?

例如,如果是arr = [3,1,5] 我怎么得到[3:"dogs", 1:"Peanuts",5:"Bears"].???

提问于
用户回答回答于

这应该这样做:

let finalDict = dict1.filter { arr.contains($0.key) }

更新:

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

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

并使用这个:

Swift 4:

let finalDict = someArray.enumerated().flatMap { arr.contains($0.offset) ? $0.element : nil }

Swift 4.1:

let finalDict = someArray.enumerated().compactMap { arr.contains($0.offset) ? $0.element : nil }

所属标签

可能回答问题的人

  • 天使的炫翼

    15 粉丝531 提问35 回答
  • 旺仔小小鹿

    社区 · 运营 (已认证)

    48 粉丝0 提问27 回答
  • 富有想象力的人

    2 粉丝0 提问26 回答
  • 发条丶魔灵1

    6 粉丝525 提问25 回答

扫码关注云+社区

领取腾讯云代金券