ios - 有人可以在 swift 数组中给出 "append if not exists"方法的片段吗?

标签 ios arrays swift append

因为我经常使用这个例程,有人可以创建一个 Swift 数组的扩展方法,它将检测是否要追加的数据已经存在,然后不追加?我知道这只是一些像这样的代码的问题:

var arr = [Int]()
for element in inputArr {
    if !arr.contains(element) { arr.append(element); }
}

变成:

var arr = [Int]()
for element in inputArr { arr.appendUnique(element); }

或者:

var arr = [String]()
for element in inputArr {
    if !arr.contains(element) { arr.append(element); }
}

变成:

var arr = [String]()
for element in inputArr { arr.appendUnique(element); }

不同元素类型的方法相同。坦率地说,从这个简单的代码中,我还想了解如何使用变量类型扩展Collection。每当使用不同的参数类型初始化对象时,Array 的方法如何具有不同的参数类型,这让我着迷。 Array 和 Dictionary 是我仍然不知道如何正确扩展它们的两件事。谢谢。

最佳答案

您可以扩展 RangeReplaceableCollection,将其元素限制为 Equatable 并将您的方法声明为可变的。如果您想在追加成功时返回 Bool,您也可以使结果可丢弃。您的扩展程序应如下所示:

extension RangeReplaceableCollection where Element: Equatable {
    @discardableResult
    mutating func appendIfNotContains(_ element: Element) -> (appended: Bool, memberAfterAppend: Element) {
        if let index = firstIndex(of: element) {
            return (false, self[index])
        } else {
            append(element)
            return (true, element)
        }
    }
}

关于ios - 有人可以在 swift 数组中给出 "append if not exists"方法的片段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46519004/

相关文章:

ios - 如何从 iOS Swift 3 的键盘上删除更改语言键按钮

ios - 将 SVG 文件与 monotuch 结合使用

python - 按数组 CSV 分组

ios - 当两个 TableView 单元格具有大部分相同的组件时,只设置一次值

ios - 尝试在 swift 中为 iphone 构建 tableView 时出现错误

php - 使用 PHP 将数组值分配给增量变量以插入到 mysql 表中

iphone - 使用 ASIHTTPRequest 上传 txt 文件

ios - diff :/Podfile. 锁:没有这样的文件或目录 - React Native - Xcode

ios - arm64 armv7 armv7s 架构设置

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP