1

我正在使用 UUID 来使用 DiffableDataSource,但我正在使用一个具有每个对象副本的数据集。

这是我在操场上使用的代码示例:

var movies: [MovieSearch] = []

struct MovieSearch: Hashable, Decodable, Equatable {
    let uuid = UUID()
    private enum CodingKeys : String, CodingKey { case Name, StartDate }
    
    let Name: String
    let StartDate: String
}
    
movies = [
  MovieSearch(Name: "Blade Runner", StartDate: "01/01/2021"), 
  MovieSearch(Name: "Blade Runner: 2049", StartDate: "01/07/2021"),     
  MovieSearch(Name: "UBIK", StartDate: "01/14/2021"),    
  MovieSearch(Name: "Blade Runner", StartDate: "01/01/2021"),    
  MovieSearch(Name: "Blade Runner: 2049", StartDate: "01/07/2021"),    
  MovieSearch(Name: "UBIK", StartDate: "01/14/2021")    
]

由于 UUID 是在初始化时添加的,在这种情况下是否有合理的方法来删除重复项?

4

2 回答 2

0

如果您不关心电影的顺序,可以使用 Swift 的 Set。

由于您MovieSearch符合 Hashable 协议,因此 Set 将确保仅存在一个副本。

您可以使用符号来遍历 Set for-in,类似于数组。

https://developer.apple.com/documentation/swift/set

struct MovieSearch: Hashable, Decodable, Equatable {
    let uuid = UUID()
    private enum CodingKeys : String, CodingKey { case Name, StartDate }
    
    let Name: String
    let StartDate: String
}
    
var movies:Set = [
  MovieSearch(Name: "Blade Runner", StartDate: "01/01/2021"), 
  MovieSearch(Name: "Blade Runner: 2049", StartDate: "01/07/2021"),     
  MovieSearch(Name: "UBIK", StartDate: "01/14/2021"),    
  MovieSearch(Name: "Blade Runner", StartDate: "01/01/2021"),    
  MovieSearch(Name: "Blade Runner: 2049", StartDate: "01/07/2021"),    
  MovieSearch(Name: "UBIK", StartDate: "01/14/2021")    
]

for movie in movies {
   print(movie.Name)
}
于 2021-05-26T00:41:52.150 回答
0

所以我猜你想要做的是删除那些重复项?

然后编写一个函数,根据电影的名称(我猜它是唯一的)删除重复项并使用它来过滤。

func removeDup(movies: [MovieSearch]) -> [MovieSearch] {
    var uniqueMovies = Set<String>()
    var moviesWithoutDups = [MovieSearch]()
    
    for movie in movies {
        if !uniqueMovies.contains(movie.name) {
            moviesWithoutDups.append(movie)
            uniqueMovies.insert(movie.name)
        }
    }
    return moviesWithoutDups
}

然后使用函数:

movies = removeDup(movies: movies)
于 2021-05-26T01:02:44.817 回答