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

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) ... 会更干净。

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

Vue绑定class与绑定内联样式--v-bind

Jenkins:可以将评论添加到 Jenkinsfile 中吗?

使用数组初始化语法有条件地添加“可选项目”?

(Python)如何使用 [:] 语法对数组的每个元素使用条件语句?

如何在 laravel 刀片语法按钮中添加内联 css?

反应:内联有条件地将道具传递给组件