当前位置: 首页 > 面试题库 >

快速表达动态范围的循环

胡禄
2023-03-14
问题内容

…或者如何在for循环条件中使用索引

大家好,因为我们在Swift 3中没有使用c风格的循环,所以我似乎找不到一种表达一些复杂的循环的方法,所以也许您可以帮我一下。

如果我要写这个

for(int i=5; num/i > 0; i*=5)

快速3我该怎么做?

我的关闭时间是:

for i in stride(from: 5, through: num, by: 5) where num/i > 0

但这当然会一次迭代5个块,如果我是:5、25、125等。

有任何想法吗?

谢谢


问题答案:

使用辅助函数(最初在将使用除法的C样式for循环转换为Swift3时定义

public func sequence<T>(first: T, while condition: @escaping (T)-> Bool, next: @escaping (T) -> T) -> UnfoldSequence<T, T> {
    let nextState = { (state: inout T) -> T? in
        // Return `nil` if condition is no longer satisfied:
        guard condition(state) else { return nil }
        // Update current value _after_ returning from this call:
        defer { state = next(state) }
        // Return current value:
        return state
    }
    return sequence(state: first, next: nextState)
}

您可以将循环写为

let num = 1000
for i in sequence(first: 5, while: { num/$0 > 0 }, next: { $0 * 5 }) {
    print(i)
}

一个更简单的解决方案是while循环:

var i = 5
while num/i > 0 {
    print(i)
    i *= 5
}

但是第一种解决方案的优点是,循环变量的范围仅限于循环主体,并且循环变量是常量。

Swift 3.1 将提供一个prefix(while:)sequence的方法,然后不再需要helper函数:

let num = 1000
for i in sequence(first: 5, next: { $0 * 5 }).prefix(while: { num/$0 > 0 }) {
    print(i)
}

以上所有解决方案均与给定的C循环“等效”。 但是, 如果它们num接近Int.max$0 * 5溢出
它们都可能崩溃。如果这是一个问题,那么在进行乘法运算 之前, 您必须检查是否$0 * 5适合整数范围。 __

实际上,这使循环更简单–至少如果我们假设 num >= 5这样,则循环至少执行一次:

for i in sequence(first: 5, next: { $0 <= num/5  ? $0 * 5 : nil }) {
    print(i)
}


 类似资料:
  • 问题内容: 我有一个大约有450万行的Postgres表。列基本上只是 当查询该表,你有一个长整型,并希望找到对应的范围内的数据,并包括该值。索引此表以进行快速查找的最佳方法是什么? 问题答案: 一个 多列索引 具有反向排序顺序: 这样,可以将索引向前扫描到足够高的位置,然后对所有行进行扫描直到太低为止- 一次扫描。这就是为什么要对索引执行排序顺序的主要原因:将不同的排序顺序组合在具有不同顺序的多

  • 为了完成这项任务,我花了几周时间试图从其他建议中拼凑出一个完整的VBA,但现在我要向大家寻求答案。我试图从ws2中的a:K列中复制一个范围,该行以值c开头,该值与ws1中的值I匹配,该行以ws1中的值I开头。正在复制的条件是1和0。它基本上是一个美化的循环v形查找,粘贴动态范围。 我弄清楚了循环机制,现在我只需要帮助编写代码来复制选定的单元格。 这是我到目前为止所拥有的:

  • 问题内容: 在ViewController.Swift中,我设法使一个盒子从一个点动画到另一个点。我认为将其循环很容易,因此框将动画到一个点,然后再动画回到其原始位置,然后再次循环。我已经设法将对象移到某个位置,并在“完成”后再次将其移回,但这并没有使我循环。如何做到这一点? 我以为这也许行得通,但老实说我不知道​​: 如何根据设备宽度居中(我假设涉及数学运算?)? 我的代码: 问题答案: 无需执

  • 高动态范围 作者|OpenCV-Python Tutorials 编译|Vincent 来源|OpenCV-Python Tutorials 目标 在本章中,我们将 了解如何根据曝光顺序生成和显示HDR图像。 使用曝光融合来合并曝光序列。 理论 高动态范围成像(HDRI或HDR)是一种用于成像和摄影的技术,可以比标准数字成像或摄影技术重现更大的动态亮度范围。虽然人眼可以适应各种光照条件,但是大多数

  • 问题内容: 我知道范围有3种类型:范围,步幅和间隔。 快速间隔是多少?以及它们使用的一个例子是什么? http://zh.wikipedia.org/wiki/间隔(数学) 编辑:这就是beta 5 xcode 6发行说明所说的: •可比较值的间隔,可以有效地检查是否包含。间隔用于switch语句中的模式匹配,并由〜=运算符使用。 问题答案: 从Swift 3(使用Xcode 8)开始,类型不再存

  • 问题是:我有一个包含时间和值(时间=长毫秒和双值)的数据列表。我现在需要计算不同时间范围内的几个平均值 我每秒最多可以得到50个值,但有时只有几个值,需要保持最后10秒,所以500个值。 我想要的是:计算时间的平均值 我可以保证没有时间是双倍的,所以它可以用作一把钥匙。 目前,我使用一个数组来存储值,并且有一个位置标记,一旦达到500,它就会重置为0,所以旧的条目会被重新调整样式。我可以很容易地改