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

标签 arrays swift algorithm for-loop

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

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/

相关文章:

javascript - 如何将整数的每一位存储在数组中

javascript - 根据 props 上的匹配集向元素数组添加属性 - es6

java - 这个字符串比较方法有问题

ios - 我如何查看 XCode 引用的浏览器版本?想查看方法列表

ios - 重建应用程序时推送 token 会改变吗?

python - 如何在没有 O^2 运行时的情况下对 Python 中的条目进行分类?

javascript - 寻找未知形状的边缘的算法

java - TreeMap.higherEntry 返回意外的 null

swift - 如果多次触摸,如何从父节点中删除节点?

python - 在这种情况下,如何摆脱递归函数的全局变量?