消除Swift中来自Strings的重复字母
var name1 : String = "sandeep"
var name2 : String = "warrior"
var name3 : String = name1+name2
var name4 : String = //output should be sndpwio
在名称4中,我想删除名称3中的所有重复字母。
我怎样才能做到这一点?
name1
和name2
将来自用户的文本框。
答案 0 :(得分:4)
使用NSCountedSet
计算每个字符出现多次,然后过滤那些只出现一次的字符:
let countedSet = NSCountedSet(array: name3.characters.map { $0 })
let name4 = String(name3.characters.filter { countedSet.count(for: $0) == 1 })
在Swift 4中,String
再次是Collection
个字符,因此您可以将代码缩短到此:
let countedSet = NSCountedSet(array: name3.map { $0 })
let name4 = name3.filter { countedSet.count(for: $0) == 1}
答案 1 :(得分:1)
您可以通过两个步骤实现此目的。首先,您需要获取两个字符串的唯一字符,然后您需要比较两个字符串的字符,并且只保留两个字符串中不存在的字符。
String
扩展名getUniqueCharacters
返回调用它的String
的唯一字符数组(您可以使用它来删除字符串的重复字符,例如作为" sandeep")。
var name1 = "sandeep"
var name2 = "warrior"
extension String{
func getUniqueCharacters()->[Character]{
var characterCounts = [Character:Int]()
self.characters.forEach{ char in
if characterCounts[char] != nil {
characterCounts[char]! += 1
} else {
characterCounts[char] = 1
}
}
return self.characters.filter{characterCounts[$0]! == 1}
}
}
然后你只需在连接的字符串上调用上面的函数就可以了。
let name3 = name1+name2
let name4 = name3.getUniqueCharacters().map{String($0)}.joined()
print(name4) //sndpwio
答案 2 :(得分:0)
var str : String = "sandeepwarrior"
// convert String to array
let letters = str.characters.map { String($0) }
// get duplicates
let duplicates = Array(Set(letters.filter({ (i: String) in letters.filter({ $0 == i }).count > 1})))
// remove duplicates from str
for item in duplicates {
str = str.replacingOccurrences(of: item, with: "")
}
print(str)