【发布时间】:2016-09-03 20:32:39
【问题描述】:
我的罗马数字转换算法中有这段代码...
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 类型块?
我能想到的唯一方法是过滤数组,然后从过滤后的数组中获取第一个对象并使用它。不过,这似乎比我现在正在做的更笨重。
编辑
在尝试编辑后,它也会使算法变慢,这是有道理的。
for/break 循环的最佳时间为 O(1),最差时间为 O(n)。
过滤器和第一种方法的最佳时间为 O(n)。
【问题讨论】:
-
您在寻找
index(where: predicate)吗? -
@MartinR 哦,我试试看。谢谢。是的,这行得通。谢谢:D
-
@MartinR 如果您想添加我会接受的答案。或者我可以自己写答案?
-
@MartinR 可能。我现在已经添加了我的答案,但我会将其标记为重复,以提供指向该 SO 问题的附加链接。
标签: arrays swift algorithm for-loop