String Swift-在字符串中的多个位置查找字符
在Swift中,使用以下字符串:“thisastring”,如何获取字符串中存在字符“”(空格)的索引数组 期望结果:[4,7,9] 我试过:String Swift-在字符串中的多个位置查找字符,string,swift,String,Swift,在Swift中,使用以下字符串:“thisastring”,如何获取字符串中存在字符“”(空格)的索引数组 期望结果:[4,7,9] 我试过: let spaces: NSRange = full_string.rangeOfString(" ") 但这只返回4,而不是所有的索引 有什么想法吗?这里有一个简单的方法: let string = "this is a string" let indices = string .characters .enumerate()
let spaces: NSRange = full_string.rangeOfString(" ")
但这只返回4,而不是所有的索引
有什么想法吗?这里有一个简单的方法:
let string = "this is a string"
let indices = string
.characters
.enumerate()
.filter { $0.element == " " }
.map { $0.index }
print(indices) // [4, 7, 9]
返回一个字符
,它是一个字符视图
(类似于单个字符的数组)集合类型
将此集合转换为包含枚举
(0到15)和索引
(每个字符)的元组的元素
序列类型
删除字符不是空格的元组filter
将元组数组转换为仅包含索引的数组map
let indices = map(filter(enumerate(string), { $0.element == " " }), { $0.index } )
(帽子尖到)。使用正则表达式的Swift 1.2解决方案
func searchPattern(pattern : String, inString string : String) -> [Int]?
{
let regex = NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions(), error: nil)
return regex?.matchesInString(string, options: NSMatchingOptions(), range: NSRange(location:0, length:count(string)))
.map { ($0 as! NSTextCheckingResult).range.location }
}
let string = "this is a string"
searchPattern("\\s\\S", inString : string) // [4, 7, 9]
searchPattern("i", inString : string) // [2, 5, 13]
您应该注意到,这需要Swift 2(Xcode 7 beta).Cool解决方案(投票)。这其中的哪一部分需要Swift 2.0,在Swift 1.2中你会怎么做?@Duncac:相应的Swift 1.2代码将是
let index=map(filter(enumerate(string),{$0.element==“”}),{$0.index})
。啊。因此,类似Haskell的语法仅在Swift 2中的2.0@Duncac中有效,map
,filter
等实现如下。Xcode 7 beta 3将方法调用拆分为单独的行的能力。下面是一个难题:searchPattern(“,inString:”