是否有 Swift 单行代码可以从数组中删除元素(如果存在)并在不存在时附加它?



这是我经常遇到的结构。有没有一种在 Swift 中单行的好方法?

我可以为它写一个关于序列的扩展,但我觉得有一种"明显的"高阶函数/集合论技术让我无法理解。

if array.contains(element) {
array.removeObject(object: element)
}
else {
array.append(element)
}

我不认为解决方案本身会更好,这只是我每次必须写这篇文章时都会想到的事情。

我找到了集合论中躲避我的部分!我想要的结果是两个数组的对称差分,这包含在Swift 的集合中:

var element = Set([1])
var set = Set([1, 2, 3])
set = set.symmetricDifference(element) //2, 3
set = set.symmetricDifference(element) //1, 2, 3

您可以尝试改用Set

var set: Set<Int> = [1, 2, 4]
if !set.insert(4).inserted {
set.remove(4)
}

基于伟大的答案。詹姆斯·韦伯斯特。我们可以增强可重用性。

extension Set {
/// Inserts given element if it doesn't exist in the set or removes it.
///
mutating func withSymmetricDifference(_ element: Element) {
self = symmetricDifference([element])
}
}

用法

var set = Set([1, 2, 3])
set.withSymmetricDifference(1) // [1, 2, 3]
set.withSymmetricDifference(1) // [2, 3]

相关内容

最新更新