问题
假设我有一个字符串数组。
仅使用函数式编程(map,reduce等),我想创建一个没有任何标点符号的新数组。
假设没有嵌入的标点符号(即它们将是它们自己)。
let test_arr = [ "This", "is", "a", "test", ";", "try", "it", "." ]
let punc = [ "!":true, ".":true, "?":true, ";":true ]
let new_arr = test_arr.remove_if { punc[ $0 ]? != nil } // how to implement?
也许这样的事情已经存在?我在Apple文档中没有运气搜索。
答案 0 :(得分:3)
我认为你最好的选择是使用filter()和NSCharacterSet的puncuationCharacterSet()检查当前元素。这应该做你想要的。
let test_arr = [ "This", "is", "a", "test", ";", "try", "it", "." ]
let charSet = NSCharacterSet.punctuationCharacterSet()
let noPuncuation = test_arr.filter { $0.rangeOfCharacterFromSet(charSet, options: .LiteralSearch, range: nil)?.startIndex == nil }
println(noPuncuation) // [This, is, a, test, try, it]
作为一个注释,您可以使用this answer中的代码获取给定字符集中所有字符的列表,或者像这样定义您自己的字符集。
let customCharset = NSCharacterSet(charactersInString: "!@#")