swift 实现将table表中的某一列或者多列数据,按照“,”拆分为多行数据拆分为多行

该博客介绍了如何使用Swift将二维字符串数组中包含逗号和冒号的元素拆分为多行数据。通过两个函数splitOneLineIntoMultipleLinesByComma和splitOneLineIntoMultipleLinesByColon,分别实现了按逗号和(StartValue:Step:EndValue)格式进行拆分。以示例数据为例,详细展示了拆分过程和输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.输入初始化的二维的字符串数组,按以上两种方式将字符串数组拆分

调用splitOneLineIntoMultipleLinesByColonsplitOneLineIntoMultipleLinesByComma两个函数实现字符串数组的拆分

输入:

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"]






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值