Сегодня, IMO, вы не должны использовать ни один из них. Теперь у нас есть Dictionary.init(uniqueKeysWithValues:)
и .init(_:uniquingKeysWith:)
, которые намного более четко указывают их намерение и делают явные угловые случаи, такие как дубликаты ключей.
Если вы статически можете доказать, что все ключи уникальны, то выбудет использовать первый:
let scoreboard = Dictionary(uniqueKeysWithValues: playerNames.map { (name: $0, score: 0) })
Если вы не можете доказать, что ключи уникальны, вы должны использовать второй, который позволит вам явно решить, что делать в случае конфликта.
let scoreboard = Dictionary(playerNames.map { (name: $0, score: 0) },
uniquingKeysWith: { first, _ in first })
Обратите внимание, как этот подход позволяет меткам ясно указывать, что это за ключ и каково его значение. Я не тестировал этот код, но ожидал, что он будет очень похож по времени на другие.