Простой ответ:
В вашем примере вы сравниваете, используя hashValue
из String
. Алгоритмы хэширования Swift 5 отличаются от алгоритмов Swift 4.
Ответ, который вы ищете:
Не сортируйте строки (или любые другие типы) по их хешам, это не то, что вы ищете. То, что вы ищете, это это .
Реализация, которую вы хотите, вероятно, такова:
extension Tag: Comparable {
static func <(lhs: Tag, rhs: Tag) -> Bool {
return lhs.rawValue < rhs.rawValue
}
}
rawValue
является необработанным String
значением перечисления.
Хеш-значение является произведением хеш-функции , которая абсолютно не связана с сортировкой.
Информация о бонусе:
Для тех проницательных наблюдателей, которые задаются вопросом, почему хэш-значения различаются при каждом прогоне Свифта, здесь - разбивка.