1.初始化一个二维的字符串数组:
let ArrayList = [["Pre-condition","RX",""],["Execution","CA_TxAnt","CA_Downlink_Channel_List"],["aaa","0,1,2,3","18575:5:18589"]]
2.实现方法:输入一字符串数组,按照逗号拆分为一个二维字符串数组
输入:
var rowArraylist1: [String] = ["aaa","bbb","0,1,2,3","ccc"]
func splitOneLineIntoMultipleLinesByComma(rowArray: [String], valueIndex: Int) -> [[String]] {
var rowArrArr: [[String]] = [[]]
var newRowArray = rowArray
let valueArray = rowArray[valueIndex].split(separator: ",")
for newValue in valueArray {
newRowArray[valueIndex] = String(newValue)
rowArrArr.append(newRowArray)
}
rowArrArr = Array(rowArrArr[rowArrArr.index(after: rowArrArr.startIndex)...])
return rowArrArr
}
输出:
["aaa", "bbb", "0", "ccc"]
["aaa", "bbb", "1", "ccc"]
["aaa", "bbb", "2", "ccc"]
["aaa", "bbb", "3", "ccc"]
3.实现方法:输入一字符串数组,按照(StartValue:Step:EndValue)拆分为一个二维字符串数组
输入:
var rowArraylist: [String] = ["aaa","bbb","18575:5:18589","ccc"]
func splitOneLineIntoMultipleLinesByColon(rowArray: [String], valueIndex: Int) -> [[String]] {
var rowArrArr: [[String]] = [[]]
var newRowArray = rowArray
let valueArray = rowArray[valueIndex].split(separator: ":")
let min = Int(valueArray[0])!
let unit = Int(valueArray[1])!
let max = Int(valueArray[2])!
let distance = max - min
var addNumberOfLine = distance / unit
let addNumberOfLines = distance % unit
if addNumberOfLines != 0 {
addNumberOfLine = addNumberOfLine + 1
}
for i in 0...addNumberOfLine {
if i == addNumberOfLine {
newRowArray[valueIndex] = String(max)
}else {
newRowArray[valueIndex] = String(i * unit + min)
}
rowArrArr.append(newRowArray)
}
rowArrArr = Array(rowArrArr[rowArrArr.index(after: rowArrArr.startIndex)...])
return rowArrArr
}
func splitOneLineIntoMultipleLinesByColon(rowArray: [String], valueIndex: Int) -> [[String]] {
var rowArrArr: [[String]] = [[]]
var newRowArray = rowArray
let valueArray = rowArray[valueIndex].split(separator: ":")
let min = Int(valueArray[0])!
let unit = Int(valueArray[1])!
let max = Int(valueArray[2])!
let distance = max - min
let addNumberOfLine = distance / unit
let rest = distance % unit
for i in 0...addNumberOfLine {
newRowArray[valueIndex] = String(i * unit + min)
rowArrArr.append(newRowArray)
}
if rest != 0 {
newRowArray[valueIndex] = String(valueArray[2])
rowArrArr.append(newRowArray)
}
rowArrArr = Array(rowArrArr[rowArrArr.index(after: rowArrArr.startIndex)...])
return rowArrArr
}
输出:
["aaa", "bbb", "18575", "ccc"]
["aaa", "bbb", "18580", "ccc"]
["aaa", "bbb", "18585", "ccc"]
["aaa", "bbb", "18589", "ccc"]
4.输入初始化的二维的字符串数组,按以上两种方式将字符串数组拆分
调用splitOneLineIntoMultipleLinesByColon和splitOneLineIntoMultipleLinesByComma两个函数实现字符串数组的拆分
输入:
let ArrayList = [["Pre-condition","RX",""],["Execution","CA_TxAnt","CA_Downlink_Channel_List"],["aaa","0,1,2,3","18575:5:18589"]]
func handleCompoundTable(_ lineArrArr: [[String]]) -> [[String]] {
var index: Int = 0
var newLineArrArr = lineArrArr
var needRecheck = false
while index < newLineArrArr.count - 1 {
for (rowIndex, rowArray) in newLineArrArr.enumerated() {
for (valueIndex, value) in rowArray.enumerated() {
if value.contains(",") {
var upperLineArrArr = newLineArrArr[...(rowIndex - 1)]
let lowerLineArrArr = newLineArrArr[(rowIndex + 1)...]
upperLineArrArr.append(contentsOf: splitOneLineIntoMultipleLinesByComma(rowArray: rowArray, valueIndex: valueIndex))
if Array(lowerLineArrArr).count != 0 {
upperLineArrArr.append(contentsOf: lowerLineArrArr)
}
newLineArrArr = Array(upperLineArrArr)
needRecheck = true
break
}else if value.contains(":") {
var upperLineArrArr = newLineArrArr[...(rowIndex - 1)]
let lowerLineArrArr = newLineArrArr[(rowIndex + 1)...]
upperLineArrArr.append(contentsOf: splitOneLineIntoMultipleLinesByColon(rowArray: rowArray, valueIndex: valueIndex))
if Array(lowerLineArrArr).count != 0 {
upperLineArrArr.append(contentsOf: lowerLineArrArr)
}
newLineArrArr = Array(upperLineArrArr)
needRecheck = true
break
}
}
index = rowIndex
guard needRecheck else {
continue
}
needRecheck = false
break
}
}
return newLineArrArr
}
输出打印实现:
var ArrayLists = Array<Array<String>>()
ArrayLists = handleCompoundTable(ArrayList)
for (arrIndex, arrList) in ArrayLists.enumerated() {
print(arrList)
}
输出结果:
["Pre-condition", "RX", ""]
["Execution", "CA_TxAnt", "CA_Downlink_Channel_List"]
["aaa", "0", "18575"]
["aaa", "0", "18580"]
["aaa", "0", "18585"]
["aaa", "0", "18589"]
["aaa", "1", "18575"]
["aaa", "1", "18580"]
["aaa", "1", "18585"]
["aaa", "1", "18589"]
["aaa", "2", "18575"]
["aaa", "2", "18580"]
["aaa", "2", "18585"]
["aaa", "2", "18589"]
["aaa", "3", "18575"]
["aaa", "3", "18580"]
["aaa", "3", "18585"]
["aaa", "3", "18589"]