Ios 有人能给我一个“小”字吗;如果不存在,则追加“;swift数组中的方法?
因为我经常使用这个例程,有人能创建一个Swift数组的扩展方法来检测要追加的数据是否已经存在,然后就不追加了吗?我知道这只是一些类似这样的代码的问题:Ios 有人能给我一个“小”字吗;如果不存在,则追加“;swift数组中的方法?,ios,arrays,swift,append,Ios,Arrays,Swift,Append,因为我经常使用这个例程,有人能创建一个Swift数组的扩展方法来检测要追加的数据是否已经存在,然后就不追加了吗?我知道这只是一些类似这样的代码的问题: var arr = [Int]() for element in inputArr { if !arr.contains(element) { arr.append(element); } } extension RangeReplaceableCollection where Element: Equatable { @dis
var arr = [Int]()
for element in inputArr {
if !arr.contains(element) { arr.append(element); }
}
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)
}
}
}
变成:
var arr = [Int]()
for element in inputArr { arr.appendUnique(element); }
var arr = [String]()
for element in inputArr { arr.appendUnique(element); }
或:
变成:
var arr = [Int]()
for element in inputArr { arr.appendUnique(element); }
var arr = [String]()
for element in inputArr { arr.appendUnique(element); }
对于不同的元素类型,使用相同的方法。坦白地说,从这段简单的代码中,我还想学习如何使用变量类型扩展
集合。每当用不同的参数类型初始化对象时,数组的方法就可以有不同的参数类型,这让我很着迷。数组和字典是我仍然不知道如何正确扩展它们的两件事。谢谢。您可以扩展RangeReplaceableCollection
,将其元素约束为equalable
,并将方法声明为mutating。如果希望在追加成功的情况下返回Bool,还可以使结果可丢弃。您的扩展应该如下所示:
var arr = [Int]()
for element in inputArr {
if !arr.contains(element) { arr.append(element); }
}
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)
}
}
}
我需要预先准备一个唯一的元素(如果它已经存在,则首先删除它)
在我的例子中,我过滤结果并在单击搜索按钮时附加api响应,但附加唯一性会减慢过程,因为它必须检查每个索引的唯一性,我基本上使我的本地数组为空或只是arr.removeAll()。为什么不使用Set呢?如果元素是相等的,则Set没有orderIf,您只需使用!包含(元素)
噢,哇,@discardableResult
,equalable
,元素
,我在一篇文章中学到了很多东西!我一直在考虑如何使结果可丢弃,这样我就不需要使用。=…
,但我不知道这样的东西存在,所以我从不查找它。谢谢此方法与接受答案方法的区别在于,接受答案方法保留现有对象索引,而此方法使用新对象索引。但我的问题是关于附加数据的。在我的例子中,最好是保留现有的对象索引。但是谢谢你的意见。