【发布时间】:2022-06-10 23:39:45
【问题描述】:
在这个例子中,我通过循环遍历每个值并附加到一个 tmp 数组来使我的结构数组与众不同。我想知道是否有更有效的方法来做到这一点。
struct DistinctListOnName{
init(){
let alist: [myList] = [myList(id: 1, name: "Jeff", status: "A"),
myList(id: 2, name: "Mike", status: "A"),
myList(id: 3, name: "Mike", status: "B"),
myList(id: 4, name: "Ron", status: "B")]
var tmp: [myList] = []
for i in alist{
if (tmp.filter({ item in
item.name == i.name
}).count == 0) {
tmp.append(i)
}
}
print(tmp)
}
}
struct myList {
var id: Int
var name: String
var status: String
init(id: Int, name: String, status: String){
self.id = id
self.name = name
self.status = status
}
}
上面的代码产生了这个预期的输出
[(id: 1, name: "Jeff", status: "A"), (id: 2, name: "Mike", status: "A"), (id: 4, name: "Ron", status: "B")]
感谢您的帮助!!
【问题讨论】:
-
为什么要保留
myList(id: 2, name: "Mike", status: "A")而不是myList(id: 2, name: "Mike", status: "B")?因为它在列表中? -
@Larme 是的,它只会根据列表的顺序删除重复项。
-
一种方法是
Dictionary(zip(alist.map(\.name), alist), uniquingKeysWith: { (first, _) in first }).values -
另一个是
alist.reduce(into: [:]) { if $0[$1.name] == nil { $0[$1.name] = $1 }}.values
标签: swift