如何从iOS Swift中的数组过滤

时间:2019-03-25 12:11:05

标签: arrays swift filter unique

我有一个数组,其中添加了来自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
  }
}

现在我的问题是过滤相同值的数组。

2 个答案:

答案 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)
}