Инициализация словаря с uniqingKeysWith, анонимное закрытие - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь понять инициализатор uniqingKeysWith для словарей, но сталкиваюсь с некоторыми проблемами при попытке использовать анонимное закрытие, чтобы указать, какое значение в кортеже использовать в качестве уникальных ключей.

let pairsWithDuplicateKeys = [("a", 1), ("b", 2), ("a", 3), ("b", 4)]
let dictionary = Dictionary(pairsWithDuplicateKeys, uniquingKeysWith: {$0.0})

Это дает мне ошибка «Тип контекстного замыкания» (Int, Int) throws -> Int «ожидает 2 аргумента, но 1 использовался в теле замыкания», и я экспериментировал с добавлением аргументов, но я не могу понять, что другой аргумент является то, что он ссылается на.

Неанонимизированная версия ниже работает нормально, но я хотел бы понять анонимную версию.

let dictionary = Dictionary(pairsWithDuplicateKeys, uniquingKeysWith: {(key, value) in key})

1 Ответ

0 голосов
/ 18 февраля 2020

closure in init(_:uniquingKeysWith:) идентифицирует значение дубликатов ключей .

let pairsWithDuplicateKeys = [("a", 1), ("b", 2), ("a", 3), ("b", 4)]
let dict = Dictionary(pairsWithDuplicateKeys) { (first, _) -> Int in
    return first
}

Выход:

print(dict) //["a": 1, "b": 2]

Другой пример:

Если вы хотите добавить значения дубликатов ключей , closure выглядит как

let dict = Dictionary(pairsWithDuplicateKeys) { (first, last) -> Int in
    return first + last
}
print(dict) //["a": 4, "b": 6]

Подробнее об этом здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...