如何将LinkedList描述字符串转换为多位数数字数组?
解决方案
你的问题出在compactMap{$0.wholeNumberValue}是遍历字符串的每个字符,所以80会被拆成'8'和'0'两个独立字符,最终得到单个数字的数组。要提取完整的数字,需要先按LinkedList的description格式分割字符串,再转换:
方法一:替换前缀+按分隔符分割
var list: LinkedList = LinkedList() list.append(value: 1) list.append(value: 80) list.append(value: 3) list.append(value: 7) // 处理description字符串 let processedNumbers = list.description // 移除开头的[HEAD] 前缀 .replacingOccurrences(of: "[HEAD] ", with: "") // 按" -> "分割成单个数字的字符串 .components(separatedBy: " -> ") // 转换为Int数组(自动过滤无效内容) .compactMap(Int.init) print(processedNumbers) // 输出 [1, 80, 3, 7]
方法二:按空格分割+过滤无效元素
如果担心前缀格式可能变化,可以用更通用的方式:
let processedNumbers = list.description // 按空格分割所有元素 .split(separator: " ") // 去掉第一个元素[HEAD] .dropFirst() // 过滤掉箭头符号-> .filter { $0 != "->" } // 转换为Int数组 .compactMap { Int($0) }
两种方法都能准确提取出description中的完整数字,得到你期望的数组。
内容的提问来源于stack exchange,提问作者Amir Abravesh
相关产品推荐
相关产品推荐

