在Swift中将String拆分为长度为1的字符串数组

时间:2019-04-02 15:56:20

标签: swift string

说我在这里有一个字符串:

var str = "Hello"

我想将字符串拆分为子字符串数组,每个子字符串的长度为1

var arr = // ["H", "e", "l", "l", "o"]

我知道我可以arr = Array(str)来获取Character s的数组,然后使用map将它们转换为String s的数组,如下所示:< / p>

let arr = Array(str).map { String($0) }

在没有map的情况下我还能做什么吗?还是使用map更好的方法?

2 个答案:

答案 0 :(得分:0)

不确定为什么要避免使用map。有很多方法可以从字符串中获取Array中的String,而无需使用map。只是为了好玩,这里有一些例子:

var str11 = "Hello"

//For character in
var a: [String] = []
for char in str11 { a.append(String(char)) }

//forEach
var b: [String] = []
str11.forEach { b.append(String($0)) }

//while + index
var c: [String] = []
var i = str11.startIndex
while i < str11.endIndex {
    c.append(String(str11[i]))
    i = str11.index(after: i)
}

//filter
var d: [String] = []
_ = str11.filter { char in
    d.append(String(char))
    return false
}

//reduce into
let e: [String] = str11.reduce(into: [String]()) {
    $0.append(String($1))
}

//compactMap
let f: [String] = str11.compactMap { String($0) }

//sorted
var g: [String] = Array(repeating: " ", count: str11.count)
_ = str11.enumerated().sorted {
    ($0.element, g[$0.offset] = String($0.element)).0 < ($1.element, g[$1.offset] = String($1.element)).0
}

//regular expression
var h: [String] = []
let regex = try! NSRegularExpression(pattern: ".{1}")
let matches = regex.matches(in: str11,
                            range: NSRange(location: 0, length: (str11 as NSString).length))
for match in matches {
    h.append(String(str11[Range(match.range, in: str11)!]))
}

//makeIterator
var j: [String] = []
var iterator = str11.makeIterator()
while let char = iterator.next() {
    j.append(String(char))
}

答案 1 :(得分:0)

感谢@vacawama的回答。 真的很好 尽管这使用了地图,但确实非常简洁。

let arr = str.map(String.init)