Как исправить: метод сортировки - PullRequest
0 голосов
/ 03 мая 2019

Вот мой метод, который обрабатывает сортировку массива строк

func bucketNameGenerator(player1Id: String, player2Id: String) -> String { 
    var bucketName : String =  ""
    var uniqueBucketID = [String]()

    uniqueBucketID = [player1Id, player2Id]

    let sortedUniqueBucketID = uniqueBucketID.sorted(by: <)

    bucketName = sortedUniqueBucketID.joined().replacingOccurrences(of: "$", with: "")

    print("[bucketNameGenerator] bucketName: \(bucketName)")

    return String(bucketName)
}

Два строковых значения не являются чистыми строками, они также содержат числовые значения. этот способ сортировки не возвращает одно и то же значение каждый раз. Нужны предложения по улучшению здесь / направлены вниз по пути создания асимметричной строки каждый раз.

Пример ожидаемых результатов:

player1Id : 123jinrk1412941jdlndma
player2Id: 49812u4jldanec192hce12n

expected result both combined and sorted in an ascending order :
49812u4jldanec192hce12n123jinrk1412941jdlndma

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

Ответы [ 2 ]

0 голосов
/ 03 мая 2019

Может быть, вы намеревались использовать >?

func bucketNameGenerator(player1Id: String, player2Id: String) -> String {
    let uniqueBucketID = [player1Id, player2Id]

    let sortedUniqueBucketID = uniqueBucketID.sorted(by: >)

    let bucketName = sortedUniqueBucketID.joined().replacingOccurrences(of: "$", with: "")

    return bucketName
}

Или проще:

func bucketNameGenerator(player1Id: String, player2Id: String) -> String {

    let output = player1Id < player2Id ?
    player2Id + player1Id : player1Id + player2Id

    return output.replacingOccurrences(of: "$", with: "")
}
0 голосов
/ 03 мая 2019

Вызов sorted только для двух предметов - излишество.

Для учета числовых значений compare строки с опцией numeric

func bucketNameGenerator(player1Id: String, player2Id: String) -> String {
    let result : String
    if player1Id.compare(player2Id, options: .numeric) == .orderedAscending {
        result = player1Id + player2Id
    } else {
        result = player2Id + player1Id
    }
    return result.replacingOccurrences(of: "$", with: "")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...