在compactMap返回中返回多个值

时间:2019-10-04 10:00:32

标签: swift

是否可以在compactMap返回中添加多个值?

这是我尝试过的。它将不起作用,因为返回值需要一个字符串。

var array: [String] = ["This","is","just","an","example"]

var newArray: [String] = array.compactMap({ return [$0, "foo"] })

print(newArray)

我想要一个输出数组,例如:[“ This”,“ foo”,“ is”,“ foo”,“ just”,“ foo”,“ an”,“ foo”,“ example”,“ foo” ]

但我不希望为该特定示例提供解决方案。我问是否有可能在compactMap中返回多个值并在compactMap中操纵其计数

2 个答案:

答案 0 :(得分:1)

这是一个很好的示例,其中错误的类型注释会破坏代码。

映射数组的类型实际上是[[String]]

基本上不注释编译器可以推断的类型。

您不需要compactMap,因为所有类型都是非可选的

let array = ["This","is","just","an","example"]
let newArray = array.map({ return [$0, "foo"] })
print(newArray)

但是要获得[String],您必须使用 flatMap

let array = ["This","is","just","an","example"]
let newArray = array.flatMap({ return [$0, "foo"] })
print(newArray)

答案 1 :(得分:1)

只需使用var persons=[ { id: 1, name: 'Daniel', job: 146 }, { id: 2, name: 'Jose', job: 163 } ]; var jobs=[ { id: 146, name: 'Developer' }, { id: 163, name: 'DevOps' } ]; var retVal=persons.map(p=>{ return {...p,job:jobs.find(j=> j.id==p.job)}; }) console.log(retVal)方法:

flatMap