我有一个数组,其中添加了来自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
}
}
现在我的问题是过滤相同值的数组。
答案 0 :(得分:0)
let filteredArray = tagsarray.filter {$0.tags == "1"} print(filteredArray)
尝试这个简单的过滤器功能
答案 1 :(得分:-1)
如果您不关心订单,只需将所有项目放入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)
}