所以我有这个方法来获得一个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]
我的问题是使用随机数组的整数,如何创建一个只包含这些键和它们的值的新字典?
例如,如果arr = [3,1,5]
,我如何获得一个新的字典
[3:"dogs", 1:"Peanuts",5:"Bears"].
发布于 2018-06-07 04:16:01
这应该可以做到:
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 finalArray = someArray.enumerated().flatMap { arr.contains($0.offset) ? $0.element : nil }
Swift 4.1:
let finalArray = someArray.enumerated().compactMap { arr.contains($0.offset) ? $0.element : nil }
更新2:
如果你需要一个字典,而不是一个数组,那么使用下面的代码:
Swift 4:
let finalDict = someArray.enumerated().flatMap { randomInts.contains($0.offset) ? ($0.offset, $0.element) : nil }.reduce(into: [:]) { $0[$1.0] = $1.1 }
Swift 4.1:
let finalDict = someArray.enumerated().compactMap { randomInts.contains($0.offset) ? ($0.offset, $0.element) : nil }.reduce(into: [:]) { $0[$1.0] = $1.1 }
https://stackoverflow.com/questions/50728527
复制相似问题