[英]Convert Swift string to array
如何在 Swift 中将字符串"Hello"
转换为数组["H","e","l","l","o"]
?
在Objective-C中,我使用了这个:
NSMutableArray *characters = [[NSMutableArray alloc] initWithCapacity:[myString length]];
for (int i=0; i < [myString length]; i++) {
NSString *ichar = [NSString stringWithFormat:@"%c", [myString characterAtIndex:i]];
[characters addObject:ichar];
}
在 Swift 中更简单:
let string : String = "Hello 🐶🐮 🇩🇪"
let characters = Array(string)
println(characters)
// [H, e, l, l, o, , 🐶, 🐮, , 🇩🇪]
这使用了以下事实
SequenceType
创建一个Array
,并且String
符合SequenceType
协议,其序列生成器枚举字符。并且由于 Swift 字符串完全支持 Unicode,这甚至适用于“基本多语言平面”之外的字符(例如🐶)和扩展的字素簇(例如🇩🇪,它实际上由两个Unicode 标量组成)。
更新:从 Swift 2 开始, String
不再符合SequenceType
,但characters
属性提供了一系列 Unicode 字符:
let string = "Hello 🐶🐮 🇩🇪"
let characters = Array(string.characters)
print(characters)
这也适用于Swift 3 。
更新:从 Swift 4 开始, String
是(再次)其Character
的集合:
let string = "Hello 🐶🐮 🇩🇪"
let characters = Array(string)
print(characters)
// ["H", "e", "l", "l", "o", " ", "🐶", "🐮", " ", "🇩🇪"]
在 Swift 4 中,您不必使用characters
来使用map()
。 只需在字符串上执行map()
。
let letters = "ABC".map { String($0) }
print(letters) // ["A", "B", "C"]
print(type(of: letters)) // Array<String>
或者,如果你更喜欢更短的: "ABC".map(String.init)
(2 字节 😀)
在 Swift 2 和 Swift 3 中,您可以对characters
属性使用map()
函数。
let letters = "ABC".characters.map { String($0) }
print(letters) // ["A", "B", "C"]
接受的答案似乎不是最好的,因为序列转换的String
不是String
序列,而是Character
:
$ swift
Welcome to Swift! Type :help for assistance.
1> Array("ABC")
$R0: [Character] = 3 values {
[0] = "A"
[1] = "B"
[2] = "C"
}
下面这对我有用:
let str = "ABC"
let arr = map(str) { s -> String in String(s) }
全局函数map()
参考在这里: http : //swifter.natecook.com/func/map/
String 上也有这个有用的函数: components(separatedBy: String)
let string = "1;2;3"
let array = string.components(separatedBy: ";")
print(array) // returns ["1", "2", "3"]
可以很好地处理由“;”等字符分隔的字符串甚至 "\\n"
为 Swift 4 更新
这里有3种方法。
//array of Characters
let charArr1 = [Character](myString)
//array of String.element
let charArr2 = Array(myString)
for char in myString {
//char is of type Character
}
在某些情况下,人们真正想要的是一种将字符串转换为每个长度为 1 个字符的小字符串数组的方法。 这是一个超级有效的方法:
//array of String
var strArr = myString.map { String($0)}
斯威夫特 3
这里有3种方法。
let charArr1 = [Character](myString.characters)
let charArr2 = Array(myString.characters)
for char in myString.characters {
//char is of type Character
}
在某些情况下,人们真正想要的是一种将字符串转换为每个长度为 1 个字符的小字符串数组的方法。 这是一个超级有效的方法:
var strArr = myString.characters.map { String($0)}
或者您可以向 String 添加扩展名。
extension String {
func letterize() -> [Character] {
return Array(self.characters)
}
}
然后你可以这样称呼它:
let charArr = "Cat".letterize()
一个简单的方法是map
变量并将每个Character
作为String
返回:
let someText = "hello"
let array = someText.map({ String($0) }) // [String]
输出应该是["h", "e", "l", "l", "o"]
。
Martin R 的答案是最好的方法,正如他所说,因为 String 符合 SquenceType 协议,您还可以枚举一个字符串,在每次迭代中获取每个字符。
let characters = "Hello"
var charactersArray: [Character] = []
for (index, character) in enumerate(characters) {
//do something with the character at index
charactersArray.append(character)
}
println(charactersArray)
let string = "hell0"
let ar = Array(string.characters)
print(ar)
对于字符串上的函数:components(separatedBy: String)
在 Swift 5.1 中
更改为:
string.split(separator: "/")
在 Swift 4 中,由于String
是Character
的集合,您需要使用map
let array1 = Array("hello") // Array<Character>
let array2 = Array("hello").map({ "\($0)" }) // Array<String>
let array3 = "hello".map(String.init) // Array<String>
您还可以创建扩展:
var strArray = "Hello, playground".Letterize()
extension String {
func Letterize() -> [String] {
return map(self) { String($0) }
}
}
func letterize() -> [Character] {
return Array(self.characters)
}
假设您有四个文本字段“otpOneTxt”、“otpTwoTxt”、“otpThreeTxt”、“otpFourTxt”和一个字符串“getOtp”
let getup = "5642"
let array = self.getOtp.map({ String($0) })
otpOneTxt.text = array[0] //5
otpTwoTxt.text = array[1] //6
otpThreeTxt.text = array[2] //4
otpFourTxt.text = array[3] //2
对于 Swift 5.3 版,它很简单:
let string = "Hello world"
let characters = Array(string)
print(characters)
// [“你好世界”]
let str = "cdcd"
let characterArr = str.reduce(into: [Character]()) { result, letter in
result.append(letter)
}
print(characterArr)
//["c", "d", "c", "d"]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.