代码之家  ›  专栏  ›  技术社区  ›  Eddie

swift forin where perform filter or skip(继续)?

  •  2
  • Eddie  · 技术社区  · 6 年前

    我只是了解了斯威夫特的forin-where,但它似乎非常缺乏文件。所以我有一个问题:它是执行filter-then循环还是只执行条件循环?给出以下代码

    var arr = [1, 2, 3, 4, 5]
    for i in arr where i > 3 {
        print(i)
    }
    

    机器是这样做的吗:

    for i in arr.filter { $0 > 3 }
    

    还是这样?

    for i in arr {
        guard i > 3 else { continue } 
        print(i)
    }
    

    我应该用在哪里,还是只是过滤然后foreach?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Martin R    6 年前

    它是后者(遍历所有元素,只执行 满足条件的元素)。

    for语句具有任意性 顺序, 不仅仅是数组。 首先过滤序列不仅效率低(内存),而且 但对于生成无限多个值的序列也是不可能的,如本例所示:

    for x in 1... where x % 3 == 0 {
        print(x)
        if x > 10 { break }
    }
    

    在这里 1... 是表示所有大于 或等于一。