使用随机整数数组过滤字典以制作新字典
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 }
所以我有这个方法来获取 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 }