代码之家  ›  专栏  ›  技术社区  ›  Abhishek Thapliyal

使用flatMap和compactMap获得不同的结果[duplicate]

  •  2
  • Abhishek Thapliyal  · 技术社区  · 7 年前

    struct Caste {
        var arr = [1,2]
    }
    
    let siri =  [Caste(), Caste(), Caste()]
    

    现在,我想要一个数组,其中每个objects数组的所有元素都包含如下:

    let re1 = siri.compactMap { $0.arr }
    print("COMPACT: \(re1)")
    let re2 = siri.flatMap { $0.arr }
    print("FLAT: \(re2)")
    

    结果:

    COMPACT: [[1, 2], [1, 2], [1, 2]] FLAT: [1, 2, 1, 2, 1, 2]

    由于flatMap在swift4.1中被弃用,所以我尝试使用compactMap,但是它给数组的数组不是一个数组。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Frederik Winkelsdorf    7 年前

    flatMap 分裂成两部分 compactMap . 平面图 是将数组展平,而 [T?] 并移除所有构成数组的nil对象 [T] . 它的计数为<=原始计数,具体取决于零的数量。