这是我处理字符串数组排序的方法
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
上面的示例未正确排序,但目标是获取每次使用两个输入值运行该方法时都相同的字符串。
答案 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: "")
}