String Swift-在字符串中的多个位置查找字符

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()

在Swift中,使用以下字符串:“thisastring”,如何获取字符串中存在字符“”(空格)的索引数组

期望结果:[4,7,9]

我试过:

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
    将元组数组转换为仅包含索引的数组
这种方法需要Swift 2(在Xcode 7测试版中)。根据评论,Swift 1.2语法:

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:”