[ios] 스위프트 문자열을 배열로 변환
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];
}
답변
스위프트에서는 더 쉽습니다.
let string : String = "Hello 🐶🐮 🇩🇪"
let characters = Array(string)
println(characters)
// [H, e, l, l, o, , 🐶, 🐮, , 🇩🇪]
이것은 사실을 사용합니다
- 는
Array
A로부터 생성 될 수있다SequenceType
, 및 String
SequenceType
프로토콜을 따르고 시퀀스 생성기는 문자를 열거합니다.
Swift 문자열은 유니 코드를 완벽하게 지원하므로 “Basic Multilingual Plane”(예 : 🐶) 외부의 문자 및 확장 된 grapheme 클러스터 (예 : 실제로 두 개의 유니 코드 스칼라 로 구성된 🇩🇪) 와도 작동 합니다.
업데이트 : Swift 2부터는 String
더 이상을 준수하지
SequenceType
않지만 characters
속성은 일련의 유니 코드 문자를 제공합니다.
let string = "Hello 🐶🐮 🇩🇪"
let characters = Array(string.characters)
print(characters)
이것은 스위프트 3 에서도 작동 합니다.
업데이트 : Swift 4부터는 s String
컬렉션입니다
Character
.
let string = "Hello 🐶🐮 🇩🇪"
let characters = Array(string)
print(characters)
// ["H", "e", "l", "l", "o", " ", "🐶", "🐮", " ", "🇩🇪"]
답변
편집 (Swift 4)
스위프트 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)
Swift 2 및 Swift 3에서는 map()
기능을 사용 하여 characters
속성을 지정할 수 있습니다 .
let letters = "ABC".characters.map { String($0) }
print(letters) // ["A", "B", "C"]
원본 (Swift 1.x)
허용 대답은 순서 변환이 있기 때문에, 최선을 될 것 같지 않습니다 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”
답변
스위프트 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)}
또는 문자열에 확장을 추가 할 수 있습니다.
extension String {
func letterize() -> [Character] {
return Array(self.characters)
}
}
그러면 다음과 같이 호출 할 수 있습니다.
let charArr = "Cat".letterize()
답변
let string = "hell0"
let ar = Array(string.characters)
print(ar)
답변
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)
답변
로 스위프트 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>