可以使用内联语法有条件地将元素添加到数组中吗?
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) ...
会更干净。以上是关于可以使用内联语法有条件地将元素添加到数组中吗?的主要内容,如果未能解决你的问题,请参考以下文章
Jenkins:可以将评论添加到 Jenkinsfile 中吗?