一尘不染

如何在Swift中从字符串中删除重复的字符

swift

红宝石有功能string.squeeze,但我似乎找不到快速等效。

例如我想转簿记员-> bokepr

我唯一的选择是创建一组字符,然后将字符从该组拉回到字符串中吗?

有一个更好的方法吗?


阅读 535

收藏
2020-07-07

共1个答案

一尘不染

编辑/更新: Swift 4.2或更高版本

您可以使用一组来过滤重复的字符:

let str = "bookkeeper"
var set = Set<Character>()
let squeezed = str.filter{ set.insert($0).inserted }

print(squeezed)   //  "bokepr"

或作为扩展,RangeReplaceableCollection也将扩展String和Substrings:

extension RangeReplaceableCollection where Element: Hashable {
    var squeezed: Self {
        var set = Set<Element>()
        return filter{ set.insert($0).inserted }
    }
}

let str = "bookkeeper"
print(str.squeezed)      //  "bokepr"
print(str[...].squeezed) //  "bokepr"
2020-07-07