我需要通读下面给出的字符串,这样我就可以从这个字符串中分隔出双线数组,所以每一行都是不同的双数组。
var sampleString = """
55
94 48
95 30 96
77 71 26 67
97 13 76 38 45
07 36 79 16 37 68
48 07 09 18 70 26 06
18 72 79 46 59 79 29 90
20 76 87 11 32 07 07 49 18
27 83 58 35 71 11 25 57 29 85
14 64 36 96 27 11 58 56 92 18 55
02 90 03 60 48 49 41 46 33 36 47 23
92 50 48 02 36 59 42 79 72 20 82 77 42
56 78 38 80 39 75 02 71 66 66 01 03 55 72
44 25 67 84 71 67 11 61 40 57 58 89 40 56 36
85 32 25 85 57 48 84 35 47 62 17 01 01 99 89 52
06 71 28 75 94 48 37 10 23 51 06 48 53 18 74 98 15
27 02 92 23 08 71 76 84 15 52 92 63 81 10 44 10 69 93
"""
例如:1st array = [55],2nd array = [94,48],依此类推。
我知道有类似的问题,我尝试了一些字符串方法:replacementOccurances(of:with :),trimmingCharacters(in :),split(seperator :)等等,我先尝试过这样的事情:< / p>
let lineSeperatedString = sampleString.replacingOccurrences(of: "\n", with: ",")
let whiteSpaceTrimmedString = lineSeperatedString.replacingOccurrences(of: " ", with: "")
print(whiteSpaceTrimmedString)
然后输出就像:
55,94 48, 95 30 96, 77 71 26 67,97 13 76 38 45,07 36 79 16 37 68, 48 07 09 18 70 26 06, 18 72 79 46 59 79 29 90,20 76 87 11 32 07 07 49 18,27 83 58 35 71 11 25 57 29 85, 14 64 36 96 27 11 58 56 92 18 55, 02 90 03 60 48 49 41 46 33 36 47 23,92 50 48 02 36 59 42 79 72 20 82 77 42,56 78 38 80 39 75 02 71 66 66 01 03 55 72, 44 25 67 84 71 67 11 61 40 57 58 89 40 56 36, 85 32 25 85 57 48 84 35 47 62 17 01 01 99 89 52,06 71 28 75 94 48 37 10 23 51 06 48 53 18 74 98 15,27 02 92 23 08 71 76 84 15 52 92 63 81 10 44 10 69 93
足够接近:(如果你忽略了每个部分开头用昏迷分隔的一些空格
然后我尝试了类似跟随的东西,以便我可以将它们转换为Ints但是它失败并将每个数字转换为int本身;
let myUpdatedArray = whiteSpaceTrimmedString.split(separator: "\n")
for i in myUpdatedArray {
let temp = i.map{String($0)}
for j in temp {
if let myInt = Int(j) {
print(myInt)
}
}
}
抱歉有点太长了,但我想展示我尝试过的所有东西,但是我自己无法解决这个问题
答案 0 :(得分:5)
您可以使用
components(separatedBy: .newlines)
将字符串分隔成
行,map
将行映射到(外部)数组components(separatedBy: .whitespaces)
将每一行分隔成
单独的数字,compactMap(Double.init)
将一行中的数字转换为Double
的(内部)数组(忽略无效的浮点数)。把它放在一起:
import Foundation
var sampleString = """
55
94 48
95 30 96
"""
let values = sampleString.components(separatedBy: .newlines).map {
$0.components(separatedBy: .whitespaces).compactMap(Double.init)
}
print(values) // [[55.0], [94.0, 48.0], [95.0, 30.0, 96.0]]
答案 1 :(得分:3)
您可以使用split
将字符串划分为一行,map
来处理每一行,split
再次将每行划分为单独的字符串,然后{{} 1}} compactMap
将项目转换为Double.init
s:
Double
这与@MartinR's answer非常相似,只是这是纯粹的Swift并且不需要 Foundation 框架。
答案 2 :(得分:1)
试试这段代码:
let rows = sampleString.components(separatedBy: .newlines)
var finalArray = [[Double]]()
for row in rows {
let array = row.components(separatedBy: .whitespaces).compactMap { Double($0) }
finalArray.append(array)
}
print(finalArray)
如果您使用的是Swift 4.0或更低版本,请将compactMap
替换为flatMap
。