可以使用内联语法有条件地将元素添加到数组中吗?

Posted

技术标签:

【中文标题】可以使用内联语法有条件地将元素添加到数组中吗?【英文标题】:Can an element be added to an array conditionally with in-line syntax? 【发布时间】:2017-05-12 06:41:47 【问题描述】:

给定一个数组

let array: [Int]

还有一个变量

let addElement: Bool

仅当addElement 为真时,是否可以使用内联语法有条件地添加元素?

以下作品:

let addElement = false
let array = [0, 1, addElement ? 2 : nil] //[0, 1, nil]

但是根本不应该有任何元素,而不仅仅是nil 值。 可以像上面的例子那样直接写吗?

【问题讨论】:

let array = [ 0, 1 ] + (addElement ? [ 2 ] : []) 【参考方案1】:

如果你想要这个内联,你可以使用compactMap 删除nil 元素:

let addElement = false
let array = [0, 1, addElement ? 2 : nil].compactMap  $0  //[0, 1]

这样做的好处是您可以在数组中的任何位置插入可选元素:

let addElement = true
let array = [0, addElement ? 2 : nil, 1].compactMap  $0  //[0, 2, 1]

【讨论】:

我想这是当前 Swift 语法中最“紧凑”的答案,所以我会接受这个答案。【参考方案2】:

虽然以下方法没有在数组的初始化中定义元素,但它确实具有未预定义新索引的优点。 我认为这是最接近在线解决方案的方法。

let addElement: Bool = false
var array = [0, 1]
(addElement) ? array.append(2) : Void()

【讨论】:

谢谢,这与单独的 if 子句相同。我正在明确寻找内联格式。 Void() 是多余的,if (addElement) ... 会更干净。

以上是关于可以使用内联语法有条件地将元素添加到数组中吗?的主要内容,如果未能解决你的问题,请参考以下文章