我有一个数组,我在其中附加来自JSON的值。
像这样
var tagsarray = [Tagging]()
tagsarray.append(Tagging.init(tags: tempTag[0], selected: false))
tagsarray.append(Tagging.init(tags: tempTag[1], selected: false))
模型
struct Tagging {
private(set) public var tags : String
public var selected : Bool
init(tags : String, selected : Bool) {
self.tags = tags
self.selected = selected
}
}
现在我的问题是过滤相同值的数组。
let filteredArray = tagsarray.filter {$0.tags == "1"} print(filteredArray)
尝试这个简单的过滤功能
如果您不关心订单,您可以将所有项目放入Set并转换回数组。
对于它你的类型需要符合Hashable
。
如果你的类型的所有属性都是Hashable
,那么你可以添加: Hashable
,编译器将为你处理休息。
struct tagging: Hashable {
private(set) public var tags : String
public var selected : Bool
init(tags : String, selected : Bool) {
self.tags = tags
self.selected = selected
}
}
tagsarray = Array(Set(tagsarray))
但如果您需要保存物品的订单,则需要手动过滤。为此你需要Equatable
。它的工作方式与Hashable
相同,编译器将为您处理实现。
struct tagging: Equatable {
private(set) public var tags : String
public var selected : Bool
init(tags : String, selected : Bool) {
self.tags = tags
self.selected = selected
}
}
tagsarray = tagsarray.reduce(into: []) { uniqs, tag in
guard !uniqs.contains(tag) else { return }
uniqs.append(tag)
}