如何从ios swift中的数组中过滤

问题描述 投票:-4回答:2

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

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

arrays swift filter unique
2个回答
0
投票
  let filteredArray = tagsarray.filter {$0.tags == "1"}
  print(filteredArray)

尝试这个简单的过滤功能


-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)
}
© www.soinside.com 2019 - 2024. All rights reserved.