我正在尝试将字符串转换为数字数组。字符串来自链表,我想在不访问实际节点的情况下获得字符串中的数字。
下面是我的代码:var list: LinkedList = LinkedList()
list.append(value: 1)
list.append(value: 80)
list.append(value: 3)
list.append(value: 7)
var numbers = list.description.compactMap{$0.wholeNumberValue}
输出:
[HEAD] 1 -> 80 -> 3 -> 7
[1, 8, 0, 3, 7]
我希望它像这样输出:
[1, 80, 3, 7]
但是我不知道怎么做
你想做的事是不可能的。
list
是字符串。因此,在添加数字之后,它看起来像这样:
"18037"
没有办法知道它最初是由[1, 80, 3, 7]
制成的。可能是[180, 37]
或[18, 0, 37]
你还没有解释为什么你想这样做,但我建议
- 没有使用字符串来存储值。在您的情况下,使用
Array<Int>
- 如果您必须使用字符串,请在值之间使用分隔符,以便您最终使用
"1,80,3,7"
,然后您可以解析它们。(见组件(separatedBy:))
你的代码在每个单独的字符上做一个紧凑的映射(这就是String.compactMap
所做的),然后在单个字符上使用wholeNumberValue
。不能用这种方式解析多位数。相反,您应该首先基于分隔符拆分字符串,然后解析字符串数组。
编辑(在给问题添加更多信息后):如果你有一个链表,你想要一个数字数组,你不应该先把链表变成字符串。
可以通过迭代List直接创建数组。
如果出于某种原因,您需要解析描述(例如,这是一个赋值,您别无选择),那么请参阅https://stackoverflow.com/a/74746771/3937
要提取字符串中的数字,将其与split(separator:)
分开,并使用compactMap
与Int()
来查找那些整数值:
let str = "[HEAD] 1 -> 80 -> 3 -> 7"
let arr = str.split(separator: " ").compactMap { Int($0) }
print(arr)
输出[1, 80, 3, 7]
Hello Use Only map函数将Int数组转换为String:----
var list = [Int]()
list.append(1)
list.append(80)
list.append(3)
list.append(7)
var numbersString = list.map { String($0) }
print(numbersString)
Output :--- ["1", "80", "3", "7"]