分类方法有待改进

时间:2019-05-03 14:16:33

标签: arrays swift string sorting

这是我处理字符串数组排序的方法

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 :(得分:0)

只给两个项目打电话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: "")
}

答案 1 :(得分:0)

也许您打算使用>吗?

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: "")
}