红宝石有功能string.squeeze,但我似乎找不到快速等效。
例如我想转簿记员-> bokepr
我唯一的选择是创建一组字符,然后将字符从该组拉回到字符串中吗?
有一个更好的方法吗?
编辑/更新: Swift 4.2或更高版本
您可以使用一组来过滤重复的字符:
let str = "bookkeeper" var set = Set<Character>() let squeezed = str.filter{ set.insert($0).inserted } print(squeezed) // "bokepr"
或作为扩展,RangeReplaceableCollection也将扩展String和Substrings:
RangeReplaceableCollection
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"