为什么map和flatMap在LazyMapCollection上的表现非常不同?

时间:2015-09-26 13:59:43

标签: dictionary swift2

我有一个包含字符串键和整数值的简单字典。我想从字典中获取整数值并对它们执行操作。地图的理想用例。所以我尝试了以下内容:

    let testDict = ["Test0":0, "Test1":1, "Test2":2]
    let testValues = testDict.values  // Returns a LazyMapCollection

    let mapResult = testValues.map( {number in "$\(number).00"} )
    print( "mapResult: \(mapResult)" )

    let mapFlatResult = testValues.flatMap( {number in "$\(number).00"} )
    print( "mapFlatResult: \(mapFlatResult)" )

mapResult不是我的预期。它返回了一个字典的LazyMapCollection的LazyMapCollection。但是,flatMap确实返回了我期望的字符串数组。

  

mapResult:LazyMapCollection,Int&gt ;, String>(_ base:   Swift.LazyMapCollection,   Swift.Int>(_ base:[“Test1”:1,“Test2”:2,“Test0”:0],_ transform:   (功能)),_变形:(功能))

     

mapFlatResult:[“$ 1.00”,“$ 2.00”,“$ 0.00”]

为什么map和flatMap之间的实现有所不同?这是地图应该做的吗?

如果将LazyMapCollection转换为数组,它会按预期进行映射:

    print( "mapResult2: " + String(Array(mapResult)) )
  

mapResult2:[“$ 1.00”,“$ 2.00”,“$ 0.00”]

0 个答案:

没有答案