如何在swift中实现remove_if(从数组中删除标点符号)?

时间:2014-12-17 03:56:13

标签: swift dictionary functional-programming

问题

假设我有一个字符串数组。

仅使用函数式编程(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文档中没有运气搜索。

1 个答案:

答案 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: "!@#")