说我在这里有一个字符串:
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
更好的方法?
答案 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)