如何在swift上删除字符串中特定字符的重复项?

如何在swift上删除字符串中特定字符的重复项?,swift,string,duplicates,Swift,String,Duplicates,我有一个字符串11223.3445566.7788.9900,现在我想创建一个函数,在这个函数中,我可以删除该字符串中特定字符的重复项,并只保留左边的第一个字符 这是关于如何更好地解释的示例代码 let string=“11223.3445566.7788.9900” let removedDuplicate=removedDuplicate(字符串:字符串,字符:“.”) 打印(删除副本)//结果11223.344556677889900 你看,与我不同的是,我只需要删除字符串中特定字符的副

我有一个字符串
11223.3445566.7788.9900
,现在我想创建一个函数,在这个函数中,我可以删除该字符串中特定字符的重复项,并只保留左边的第一个字符

这是关于如何更好地解释的示例代码

let string=“11223.3445566.7788.9900”
let removedDuplicate=removedDuplicate(字符串:字符串,字符:“.”)
打印(删除副本)//结果11223.344556677889900

你看,与我不同的是,我只需要删除字符串中特定字符的副本,而不是所有重复的字符。

你可以使用
组件(分隔符:)
连接()
来实现这一点

func removeDuplicate(string: String, char: String) -> String {
    let arr = string.components(separatedBy: char)
    var result = arr[0]
    if arr.count > 1 {
        result += char + arr[1]
    }
    if arr.count > 2 {
        result += arr[2...].joined()
    }
    return result
}

您可以使用
组件(分隔符:)
连接()
来实现该功能

func removeDuplicate(string: String, char: String) -> String {
    let arr = string.components(separatedBy: char)
    var result = arr[0]
    if arr.count > 1 {
        result += char + arr[1]
    }
    if arr.count > 2 {
        result += arr[2...].joined()
    }
    return result
}

可以找到特定字符第一次出现的位置,然后删除该位置之后的所有其他出现:

func removeDuplicate(string: String, char: Character) -> String {
    if var idx = string.firstIndex(of: char) {
        string.formIndex(after: &idx)
        var s = string
        s.replaceSubrange(idx..., with: s[idx...].filter { $0 != char })
        return s
    } else {
        return string
    }
}
例如:

let string = "11223.3445566.7788.9900"
print(removeDuplicate(string: string, char: "."))
// 11223.344556677889900

可以找到特定字符第一次出现的位置,然后删除该位置之后的所有其他出现:

func removeDuplicate(string: String, char: Character) -> String {
    if var idx = string.firstIndex(of: char) {
        string.formIndex(after: &idx)
        var s = string
        s.replaceSubrange(idx..., with: s[idx...].filter { $0 != char })
        return s
    } else {
        return string
    }
}
例如:

let string = "11223.3445566.7788.9900"
print(removeDuplicate(string: string, char: "."))
// 11223.344556677889900

或者干脆
返回字符串[…idx]+string[idx…]。我只是想知道为什么子字符串串联返回一个
字符串
,而不是
子字符串
。@LeoDabus:现在我看到了:
String[idx…]。filter()
返回一个
字符串
,并且有一个重载
+
,将一个序列作为第一个参数,一个字符串作为第二个参数,还一个String@LeoDabus:选中此项:“根据SE-163中的指导,返回新字符串的方法不应返回子字符串,子字符串不应仅采用返回Self的RangeReplacableCollection.filter的默认值”@LeoDabus:这就是我的意思,它是与我上面链接的pull请求一起添加的。或者干脆
返回字符串[…idx]+字符串[idx…]。过滤器{$0!=char}
@LeoDabus:是的,这是另一个选项。我只是想知道为什么子字符串串联返回一个
字符串
,而不是
子字符串
。@LeoDabus:现在我看到了:
String[idx…]。filter()
返回一个
字符串
,并且有一个重载
+
,将一个序列作为第一个参数,一个字符串作为第二个参数,还一个String@LeoDabus:选中此项:“根据SE-163中的指导,返回新字符串的方法不应返回子字符串,子字符串不应仅采用返回Self的RangeReplaceableCollection.filter的默认值”@LeoDabus:这就是我的意思,它是与我上面链接的pull请求一起添加的。