首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果swift中存在特定字符,则从数组中删除字符串

如果swift中存在特定字符,则从数组中删除字符串
EN

Stack Overflow用户
提问于 2018-01-21 10:10:24
回答 3查看 380关注 0票数 1

我正在编写一些Swift代码来遍历字符串数组( teams ),如果存在来自另一个数组(charsToRemove)的特殊字符,则从teams数组中删除该项。或者,我也可以将不包含特殊字符的项添加到数组中。以下是一些示例数据:

代码语言:javascript
复制
teams = ["lime", "teal/gold", "red-2", "orange", "orange(6)", "blue-7" ... ]
charsToRemove = [ "(", ")", "-", " ", "/" ... ]

最终结果应该如下所示:

代码语言:javascript
复制
teams = ["lime", "orange"]

我已经尝试了几次循环,但正在寻找可能是最好的路线。团队数组和特殊字符有点长,但不想在这里粘贴太多。

EN

回答 3

Stack Overflow用户

发布于 2018-01-21 10:25:15

您可以使用字符串方法rangeOfCharacter(from: CharacterSet)来检查它是否找到某个字符集的范围,并使用它来过滤您的数组:

代码语言:javascript
复制
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"]
票数 1
EN

Stack Overflow用户

发布于 2018-01-21 10:27:36

您可以在阵列上使用单个filter操作。在过滤器内部,您只需要调用charsToRemove.contains(where:)来检查teamName是否包含charsToRemove的任何元素,如果不包含,则将团队名称保留在过滤后的数组中。

代码语言:javascript
复制
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
})
票数 0
EN

Stack Overflow用户

发布于 2018-01-21 15:20:07

Leo's answer的一种更可重用(也更干净)的方法是扩展Array

代码语言:javascript
复制
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,如果你想扩大它的应用范围:

代码语言:javascript
复制
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未排序)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48363026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档