Словарь неупорядочен. Это означает, что независимо от того, какой порядок вы видите в коде, KVP не гарантируется. Вызов sort
говорит только о сортировке по значениям, поэтому ключи могут быть в любом порядке.
Также обратите внимание, что Swift's sorted(by:)
не является стабильным . Это означает, что вещи, считающиеся равными, не гарантируют сохранение своего порядка.
Следовательно, вы ничего не сможете с этим поделать, если будете настаивать на использовании встроенных алгоритмов Swift. Вы могли бы написать сортировку вставкой (алгоритм стабильной сортировки) и использовать ее.
Другое решение - упорядочить KVP по значениям, а затем по ключам:
let newDict = dict.sorted(by: { $0.value == $1.value ? $0.key < $1.key : $0.value < $1.value })
Очевидно, это будет работать, только если имена ваших игроков упорядочены в оригинальном лексикографическом порядке.
Либо создайте структуру Player
и используйте массив Player
s:
struct Player {
let name: String
var score: Int
}