在swift中为数组附加唯一值

时间:2015-08-20 00:18:01

标签: arrays swift append

我在Swift上找不到任何相关内容。找到了如何在数组上找到唯一值,但不是这样。对不起,如果听起来很基本......

但我有以下数组

var selectedValues = [String]()

以下来自Parse查询的值

 var objectToAppend = object.objectForKey("description")! as! String

这就是我现在正在做的事情。

self.selectedHobbies.append(objectToAppend)

但是因为查询重复发生,所以最终会附加重复的值。它有效,但我只是想浪费内存,只保留独特的价值。

关于如何在swift中解决这个问题的任何想法?

2 个答案:

答案 0 :(得分:15)

您可以使用保证唯一值的Set

var selectedValues = Set<String>()
// ...
selectedValues.insert(newString) // will do nothing if value exists

当然,Set的元素不是有序的。

如果您想保留订单,只需继续Array,但在插入之前检查。

if !selectedValues.contains("Bar") { selectedValues.append("Bar") }

答案 1 :(得分:3)

我想您的问题已解决,但是我为遇到相同问题的下一个开发人员添加了答案:)

我的解决方案是编写Array的扩展,以独特的方式添加数组中的元素:

此处是代码:

extension Array{
    public mutating func appendDistinct<S>(contentsOf newElements: S, where condition:@escaping (Element, Element) -> Bool) where S : Sequence, Element == S.Element {
      newElements.forEach { (item) in
        if !(self.contains(where: { (selfItem) -> Bool in
            return !condition(selfItem, item)
        })) {
            self.append(item)
        }
    }
  }
}

示例:

var accounts: [Account]
let arrayToAppend: [Account]
accounts.appendDistinct(contentsOf: arrayToAppend, where: { (account1, account2) -> Bool in
        return account1.number != account2.number
})