gpt4 book ai didi

arrays - 数组中第一个对象的 Swift 数组

转载 作者:行者123 更新时间:2023-11-30 13:06:23 24 4
gpt4 key购买 nike

我的罗马数字转换算法中有这段代码...

for (a, r) in arabicToRomanArray where substring.hasPrefix(r) {
arabic += a
let index = substring.index(substring.startIndex, offsetBy: r.characters.count)
substring = substring.substring(from: index)
break
}

我想知道是否有更简单的方法来做到这一点。

目前我正在执行一个条件 for 循环,然后在第一个条目处中断。有没有办法做for first键入带有条件的 block ?

我能想到的唯一方法是过滤数组,然后从过滤后的数组中获取第一个对象并使用它。不过,看起来比我现在正在做的事情更笨拙。

编辑

尝试编辑后,它也会使算法变慢,这是有道理的。

for/break 循环的最佳时间为 O(1),最坏时间为 O(n)。

过滤器和第一个方法的最佳时间为 O(n)。

最佳答案

感谢@MartinR 的评论,我找到了一种更好的方法来完成同样的事情。

它在时间上与 for/break 循环相当,但不那么笨重。

我之前的代码...

for (a, r) in arabicToRomanArray where substring.hasPrefix(r) {
arabic += a
let index = substring.index(substring.startIndex, offsetBy: r.characters.count)
substring = substring.substring(from: index)
break
}

现在是...

let (a, r) = arabicToRomanArray[arabicToRomanArray.index(where:{string.hasPrefix($0.1)})!]
arabic += a
let index = substring(substring.startIndex, offsetBy: numCharacters)
substring = substring.substring(from: index)

使用数组函数...

array.index(where: (Element) -> Bool)

像...

arabicToRomanArray.index(where:{string.hasPrefix($0.1)})

完成此操作后,我还将一些代码重构为函数,所以现在实际上......

let (a, r) = findPrefixedArabicToRoman(string: substring)
arabic += a
substring = remove(numCharacters: r.characters.count, fromString: substring)

关于arrays - 数组中第一个对象的 Swift 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39311087/

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