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

Jon*_*han 2 string swift

ruby有函数string.squeeze,但我似乎无法找到一个快速的等价物.

例如,我想转为簿记员 - > bokepr

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

有一个更好的方法吗?

Leo*_*bus 8

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

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

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

print(squeezed)   //  "bokepr"
Run Code Online (Sandbox Code Playgroud)

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

extension RangeReplaceableCollection where Element: Hashable {
    var squeezed: Self {
        var set = Set<Element>()
        return filter{ set.insert($0).inserted }
    }
}
Run Code Online (Sandbox Code Playgroud)
let str = "bookkeeper"
print(str.squeezed)      //  "bokepr"
print(str[...].squeezed) //  "bokepr"
Run Code Online (Sandbox Code Playgroud)

  • 这就是我的想法,但这不是那么干净.非常感谢你! (2认同)