过滤域对象只能按属性获取一个(不同的)对象

3 distinct realm nspredicate swift

让我解释一下原因标题可能有点令人困惑.

假设我有类型电影的领域对象:

Movie1(id: 0, genre: "horror")

Movie2(id: 1, genre: "horror")

Movie3(id: 3, genre: "sci-fi")
Run Code Online (Sandbox Code Playgroud)

我需要做的是获得每个类型的第一个(在这种情况下Movie1Movie3)

我只想使用realm+ 来做w/o循环NSPredicate,所以性能更好,但我有点卡在那里......

到目前为止,我得到的是:

Realm().objects(Movie.self).sorted(byKeyPath: id, ascending: true)
.value(forKeyPath: "@distinctUnionOfObjects.genre") 
Run Code Online (Sandbox Code Playgroud)

这将返回一个数组,("horror", "sci-fi")我无法确定下一步应该是什么.如果我尝试做一个:

 .filter("genre IN %@", arrayWithDistinctGenres) 
Run Code Online (Sandbox Code Playgroud)

它会把我所有的物品归还给我.

可能它很简单,但我无法想象如何做到这一点.

任何帮助表示赞赏.

Tho*_*yne 14

从Realm Swift 3.1开始,您可以使用在不同操作之前应用的排序顺序let movies = realm.objects(Movie.self).sorted(by: ["id", true]).distinct(by: ["genre"])选择Movie每个类型的第一个.