gpt4 book ai didi

arrays - 检查并仅从字符串数组中获取 Int

转载 作者:行者123 更新时间:2023-11-28 16:05:38 26 4
gpt4 key购买 nike

我目前正在开发一个用于化学计算的小应用程序。我正在尝试编写一个 Mol 计算器,您只需在其中输入求和公式及其数量。没有任何数字,它可以完美地工作,例如,如果我输入 NaCl100 克(您在不同的文本字段中输入克),您将得到大约 1.73 mol,这是正确的解决方案。

我现在想做的是我可以添加数字,例如 Na2Cl4。在我的方法中,字符串被正确分割,如果你打印它你会得到 ["Na", "2", "Cl", "4"] 但我不知道我怎么能取出 Int 并记住它们被分配给哪个元素(2 分配给 Na,4 分配给 Cl,因为我需要将 mol/g 乘以 2)。

我尝试了以下方法:该数字将始终位于奇数索引上(Na 位于 0、2 位于 1,Cl 位于 2、4 位于 3),因此我尝试将奇数索引处的每个元素放入一个新数组中:

var i = 0
var testarray = [String]()

for content in splitted {
if i % 2 == 0 {

}else {
testarray.append(content)
}
print(content)
i += 1
}

splitted 是包含拆分求和公式的 [String] 数组。如果我打印出内容,我得到的结果是 2 和 4,这很好,但是如果我输入例如 Na10,我得到 1 和 0,这是不好的,它也不知道它被分配给了哪个元素。

有谁知道如何解决这个问题,我可以从字符串数组中获取 Int 值并记住它们被分配给哪个元素?

提前致谢!

编辑:

这是我如何拆分字符串的代码:

let splitted = summenformel.characters.splitBefore(separator: { $0.isUpperCase }).map{String($0)}

和扩展:

    extension Sequence {
func splitBefore(
separator isSeparator: (Iterator.Element) throws -> Bool
) rethrows -> [AnySequence<Iterator.Element>] {
var result: [AnySequence<Iterator.Element>] = []
var subSequence: [Iterator.Element] = []

var iterator = self.makeIterator()
while let element = iterator.next() {
if try isSeparator(element) {
if !subSequence.isEmpty {
result.append(AnySequence(subSequence))
}
subSequence = [element]
}
else {
subSequence.append(element)
}
}
result.append(AnySequence(subSequence))
return result
}
}

extension Character {
var isUpperCase: Bool { return String(self) == String(self).uppercased() }
}

最佳答案

使用正则表达式的替代方法

正则表达式搜索:

大写字母后跟可选的小写字母后跟可选的数字

let string = "Na10Cl4"

let pattern = "([A-Z]([a-z]+)?)(\\d+)?"
let regex = try! NSRegularExpression(pattern: pattern, options: [])
let matches = regex.matches(in: string, options: [], range: NSRange(location: 0, length: string.characters.count))
for match in matches {
let elementRange = match.rangeAt(1) // capture group of the element
let element = (string as NSString).substring(with: elementRange)
print("element", element)
let quantityRange = match.rangeAt(3) // capture group of the quantity
let quantity : Int
if quantityRange.location != NSNotFound {
quantity = Int((string as NSString).substring(with: quantityRange))!
} else {
quantity = 1
}
print("quantity", quantity)
}

关于arrays - 检查并仅从字符串数组中获取 Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40346662/

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