Swift 4中如何将金字塔型字符串转换为Double数组
金字塔字符串转每行Double数组解决方案
我来帮你搞定这个把金字塔型字符串拆分成每行独立Double数组的需求,下面是用Swift实现的完整方案:
完整代码示例
let 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 0... """ // 1. 按行拆分字符串并过滤空行 let rowStrings = sampleString.components(separatedBy: .newlines).filter { !$0.isEmpty } // 2. 将每行转换为Double数组 var pyramidDoubleArrays: [[Double]] = [] for row in rowStrings { let doubleRow = row.components(separatedBy: .whitespaces) .filter { !$0.isEmpty } // 处理连续空格产生的空字符串 .compactMap { Double($0) } // 转换为Double,自动过滤无效值 pyramidDoubleArrays.append(doubleRow) } // 可选:打印验证结果 for (lineNumber, row) in pyramidDoubleArrays.enumerated() { print("第 \(lineNumber + 1) 行:\(row)") }
步骤详解
- 按行拆分:使用
components(separatedBy: .newlines)把整个多行字符串拆分成单行字符串的集合,再用filter去掉可能存在的空行(比如字符串首尾的空白行)。 - 每行转Double数组:
- 用
components(separatedBy: .whitespaces)把单行字符串按空格分割成单个数字字符串; - 再次过滤空字符串,避免连续空格导致的无效元素;
- 用
compactMap把每个数字字符串转换为Double类型,这个方法会自动跳过转换失败的元素(比如如果字符串里混入了非数字内容)。
- 用
注意事项
- 原字符串中的带前导零的数字(比如
07)转换为Double后会变成7.0,这是Double类型的特性,它不保留前导零格式;如果需要保留原始字符串格式,可以把数组类型改成[[String]],去掉compactMap里的Double()转换即可。 - 如果你的金字塔字符串是其他语言的环境(比如Python),思路是类似的:按行拆分→分割每行数字→转换类型,只是语法略有不同。
内容的提问来源于stack exchange,提问作者emrepun
相关产品推荐
相关产品推荐

