gpt4 book ai didi

ios - 从 Swift 中的字符串解析多个 double

转载 作者:搜寻专家 更新时间:2023-11-01 06:26:20 24 4
gpt4 key购买 nike

在 Swift 中从字符串(在 UITextView 中输入)解析多个 double 值并将它们放入 double 值数组中的最简单/最干净的方法是什么?

假设用户输入“23.4 45 16.997 -32”。当他进入时,我想要

doubleArray[0] = 2
doubleArray[0] = 23
doubleArray[0] = 23.
doubleArray[0] = 23.4
doubleArray[1] = 4
doubleArray[1] = 45

等等

我有

var dataArray = [""]
dataArray = inputString.components(separatedBy: " ")

它可以很好地将数据分成字符串数组,然后我可以将每个字符串转换为 double 。但是有没有更简洁更简洁的方式呢?

此外,有没有一种方法可以轻松地实时验证进入 UITextView 的数据?例如,一个条目中不允许有多个小数点或负号,不能有字母等?

我现在正在用

let decimalPoint = NSLocale.current.decimalSeparator! as String
let validChars : Set<Character> = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "-", decimalSeparator[0], " "]

validChar = Set(inputString).isSubset(of: validChars)
If !validChar {
inputString.deleteBackward()
//display Error Message
}

当然,这还需要确保没有小数点或负号等。都是简单的步骤,但是有没有更简单的东西?!? (这也大大简化了——我实际上有特定的错误消息,例如“只允许一个小数点分隔符”、“无效字符”等)

(我也在其他情况下使用过 NSNumber,但不确定如何/是否可以在这里使用它。)

我觉得我正在重新发明轮子......

最佳答案

结合 Leo 和 Martin 的回答:

let arrayOfDoubles = "This costs US$ 7.99"
.components(separatedBy:.whitespacesAndNewlines)
.compactMap{Double($0)}

应该工作并处理多种空白,如空格、不间断空格、制表符和换行符。

根据 Martin R 的说法,它不会处理不同区域设置的不同数字格式。

您可以将 NumberFormatter 添加到组合中:

let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.locale = Locale(identifier: "de")

let arrayOfDoubles = "7 3,4 12,2 9 2,3"
.components(separatedBy:.whitespacesAndNewlines)
.compactMap{ formatter.number(from: $0).map { $0.doubleValue } }

print(arrayOfDoubles)

(上面的示例是为处理德语格式数字而编写的,带有逗号小数点分隔符。)

但是,如果您要处理用于向服务器发送/接收的固定数字格式,则可能无关紧要。

关于ios - 从 Swift 中的字符串解析多个 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54013544/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com