Swift 快速字符串到数组
我在Swift中有一个字符串,如下所示:Swift 快速字符串到数组,swift,Swift,我在Swift中有一个字符串,如下所示: ["174580798","151240033","69753978","122754394","72373738","183135789","178841809","84104360","122823486","184553211","182415131","70707972"] 我需要把它变成一个垃圾堆 我已经研究了其他方法,但是它将每个字符分解成一个单独的数组元素,而不是用逗号。见: 我尝试过使用map()函数,也尝试过各种类型的强制转换,但似乎
["174580798","151240033","69753978","122754394","72373738","183135789","178841809","84104360","122823486","184553211","182415131","70707972"]
我需要把它变成一个垃圾堆
我已经研究了其他方法,但是它将每个字符分解成一个单独的数组元素,而不是用逗号。见:
我尝试过使用map()函数,也尝试过各种类型的强制转换,但似乎都没有成功
提前感谢。这可能是一个JSON字符串,所以您可以尝试一下
let string = "[\"174580798\",\"151240033\",\"69753978\",\"122754394\",\"72373738\",\"183135789\",\"178841809\",\"84104360\",\"122823486\",\"184553211\",\"182415131\",\"70707972\"]"
let data = string.dataUsingEncoding(NSUTF8StringEncoding)!
let jsonArray = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(), error: nil) as! [String]
由于类型[String]
不同,您可以强制转换它
Swift 3+:
let data = Data(string.utf8)
let jsonArray = try! JSONSerialization.jsonObject(with: data) as! [String]
试试这个。我刚刚添加了删除字符串中除数字以外的任何符号的函数。在您的案例中,它有助于删除
“
和[]
var myString = "[\"174580798\",\"151240033\",\"69753978\",\"122754394\",\"72373738\",\"183135789\",\"178841809\",\"84104360\",\"122823486\",\"184553211\",\"182415131\",\"70707972\"]"
var s=myString.componentsSeparatedByString("\",\"")
var someArray: [String] = []
for i in s {
someArray.append(deleteAllExceptNumbers(i))
}
println(someArray[0]);
func deleteAllExceptNumbers(str:String) -> String {
var rez=""
let digits = NSCharacterSet.decimalDigitCharacterSet()
for tempChar in str.unicodeScalars {
if digits.longCharacterIsMember(tempChar.value) {
rez += tempChar.description
}
}
return rez.stringByReplacingOccurrencesOfString("\u{22}", withString: "")
}
其他两个答案是可行的,尽管SwiftStudiers在性能方面不是最好的。vadian说得对,您的字符串很可能是JSON。这里我介绍了另一种方法,它不涉及JSON解析,而且速度非常快:
import Foundation
let myString = "[\"174580798\",\"151240033\",\"69753978\",\"122754394\",\"72373738\",\"183135789\",\"178841809\",\"84104360\",\"122823486\",\"184553211\",\"182415131\",\"70707972\"]"
func toArray(var string: String) -> [String] {
string.removeRange(string.startIndex ..< advance(string.startIndex, 2)) // Remove first 2 chars
string.removeRange(advance(string.endIndex, -2) ..< string.endIndex) // Remote last 2 chars
return string.componentsSeparatedByString("\",\"")
}
toArray(myString) // ["174580798", "151240033", "69753978", ...
它返回一个Int
s的数组
编辑:对于喜欢不变性和函数式编程的人,有以下解决方案:
func toArray(string: String) -> [String] {
return string[advance(string.startIndex, 2) ..< advance(string.endIndex, -2)]
.componentsSeparatedByString("\",\"")
}
func-toArray(字符串:字符串)->[string]{
返回字符串[advance(string.startIndex,2)…
或者这个:
func toArray(string: String) -> [Int] {
return string[advance(string.startIndex, 2) ..< advance(string.endIndex, -2)]
.componentsSeparatedByString("\",\"")
.flatMap{ Int($0) }
}
func-toArray(字符串:字符串)->[Int]{
返回字符串[advance(string.startIndex,2)…
Swift 1.2:
如果有人建议您要返回一个Int数组,那么您可以通过myString使用以下简洁的行获得该数组:
var myArrayOfInt2 = myString.componentsSeparatedByString("\"").map{$0.toInt()}.filter{$0 != nil}.map{$0!}
在Swift 2中(Xcode 7.0 beta 5):
这是因为在强制转换失败时,强制转换将返回一个可选的nil
,例如使用[
,]
和,
。因此,似乎不需要其他代码来删除这些字符
编辑:正如Kametrixom在下面所评论的那样-这可以在Swift 2中使用.flatMap
进一步简化,如下所示:
var myArrayOfInt = myString.componentsSeparatedByString("\"").flatMap{ Int($0) }
此外,并分别: 参考瓦迪安的优秀答案。在Swift 2中,这将成为:
// ...
do {
let jsonArray = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions()) as! [String]
} catch {
_ = error // or do something with the error
}
您的字符串是否为“174580798”、“151240033”。我指的是逗号分隔的字符串?是的(前面和后面都有方括号):)那么它已经是一个数组了。它看起来像一个数组,但它是字符串类型的,无法转换。您是否尝试过
componentsSeparatedByString
函数?这确实应该是可以接受的答案。原始字符串显然是JSON,这就是您解析JSON的方式。但是您没有发布性能丰富的答案,所以您可以离开你对自己的看法对你的代码有几点:你的函数deleteAllExceptNumbers
实际上只对第一个和最后一个元素做了一些事情;它每次都创建一个NSCharacterSet;它每次都创建一个新字符串,即使99%的时间传入的字符串根本没有变化,追加也不便宜;你为什么要使用它<代码>\u{22}而不仅仅是\“
?;由于append
s,您的someArray
必须分配大量内存;原始字符串至少被遍历3次。。。很抱歉这么抱怨,但这不是很好的代码。我会考虑的,谢谢。你可以用flatMap{Int($0)}
代替map{Int($0)}。filter{$0!=nil}。map{$0!}
很好-我已经在我的答案中添加了这个解决方案。我真的很喜欢这是多么简洁。
var myArrayOfInt = myString.componentsSeparatedByString("\"").flatMap{ Int($0) }
// ...
do {
let jsonArray = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions()) as! [String]
} catch {
_ = error // or do something with the error
}