Фильтрация словаря с массивом случайных интервалов для создания нового слова - PullRequest
0 голосов
/ 06 июня 2018

Итак, у меня есть этот метод, чтобы получить массив случайных чисел от 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]

МОЙ вопрос заключается в использовании Ints из случайного массива каксоздать новый словарь, который включает только эти ключи и их значения?

Так, например, если arr = [3,1,5] как мне получить новый словарь

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

1 Ответ

0 голосов
/ 06 июня 2018

Это должно сделать это:

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 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...