我正在编写一些Swift代码来遍历字符串数组( teams ),如果存在来自另一个数组(charsToRemove)的特殊字符,则从teams数组中删除该项。或者,我也可以将不包含特殊字符的项添加到数组中。以下是一些示例数据:
teams = ["lime", "teal/gold", "red-2", "orange", "orange(6)", "blue-7" ... ]
charsToRemove = [ "(", ")", "-", " ", "/" ... ]最终结果应该如下所示:
teams = ["lime", "orange"]我已经尝试了几次循环,但正在寻找可能是最好的路线。团队数组和特殊字符有点长,但不想在这里粘贴太多。
发布于 2018-01-21 10:25:15
您可以使用字符串方法rangeOfCharacter(from: CharacterSet)来检查它是否找到某个字符集的范围,并使用它来过滤您的数组:
let teams = ["lime", "teal/gold", "red-2", "orange", "orange(6)", "blue-7"]
let charsToRemove = [ "(", ")", "-", " ", "/" ]
let cs = CharacterSet(charactersIn: charsToRemove.joined())
let filtered = teams.filter({ $0.rangeOfCharacter(from: cs) == nil })
print(filtered) // ["lime", "orange"]发布于 2018-01-21 10:27:36
您可以在阵列上使用单个filter操作。在过滤器内部,您只需要调用charsToRemove.contains(where:)来检查teamName是否包含charsToRemove的任何元素,如果不包含,则将团队名称保留在过滤后的数组中。
let teams = ["lime", "teal/gold", "red-2", "orange", "orange(6)", "blue-7" ]
let charsToRemove = [ "(", ")", "-", " ", "/"]
let filteredTeams = teams.filter({ teamName -> Bool in
charsToRemove.contains(where: { teamName.contains($0) }) == false
})发布于 2018-01-21 15:20:07
Leo's answer的一种更可重用(也更干净)的方法是扩展Array
extension Array where Element == String {
/// Returns a new array after applying the filter
var cleaned: [Element] {
let charSet = CharacterSet(charactersIn: " ()-/") // note the space
return filter { $0.rangeOfCharacter(from: charSet) == nil }
}
}
let teams = ["lime", "teal/gold", "red-2", "orange", "orange(6)", "blue-7"]
print(teams.cleaned) // prints: ["lime", "orange"]或者扩展Sequence,如果你想扩大它的应用范围:
extension Sequence where Element == String {
/// Returns a new array after applying the filter
var cleaned: [Element] {
let charSet = CharacterSet(charactersIn: " ()-/") // note the space
return filter { $0.rangeOfCharacter(from: charSet) == nil }
}
}
let teams = ["lime", "teal/gold", "red-2", "orange", "orange(6)", "blue-7"]
print(teams.cleaned) // prints: ["lime", "orange"]
let set = Set(teams)
print(set.cleaned) // prints: ["orange", "lime"](注:Set__'s未排序)
https://stackoverflow.com/questions/48363026
复制相似问题