所以我有这种方法在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"].
答案 0 :(得分:3)
这应该这样做:
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)
然后使用它:
let finalArray = someArray.enumerated().flatMap { arr.contains($0.offset) ? $0.element : nil }
let finalArray = someArray.enumerated().compactMap { arr.contains($0.offset) ? $0.element : nil }
如果你需要一个字典而不是一个数组,最后使用它:
let finalDict = someArray.enumerated().flatMap { randomInts.contains($0.offset) ? ($0.offset, $0.element) : nil }.reduce(into: [:]) { $0[$1.0] = $1.1 }
let finalDict = someArray.enumerated().compactMap { randomInts.contains($0.offset) ? ($0.offset, $0.element) : nil }.reduce(into: [:]) { $0[$1.0] = $1.1 }