2016-06-01 56 views
0

我想列出用戶可以添加到事件的聯繫人,但是我想過濾結果以便重複顯示。因此,如果我添加了John Doe,他的聯繫人將不會顯示在聯繫人列表中。我對NSPredicate並不熟悉,所以我不確定這是最好的方法還是將Results數組轉換爲更容易處理的東西。什麼是最簡單而有效的方法來檢查領域中的重複結果<>?

+0

爲什麼不保存並用primaryKey更新模型如果你不想重複的結果? –

+0

我將結果轉換爲集合,然後使用'exclusiveOrInPlace'從已保存的事件中刪除一組以前使用的聯繫人。我有3組聯繫人添加,以前的聯繫人,和一個結果。這應該是效率問題嗎? – ggworean

回答

0

這裏是kotlin的例子,但非常接近swift。 你可以做那樣的事情。您可以獲取按名稱過濾的用戶列表,而不是獲取RealmResults。

fun filteredUsers(){ 
    val realm = Realm.getDefaultInstance() 
    realm.where(UserRealm::class.java) 
     .findAllAsync() 
     .asObservable() 
     .filter { users -> users.isLoaded } 
     .flatMap { users -> Observable.from(users) } 
     .filter { user -> !user.name.equals("John Doe") } 
     .observeOn(AndroidSchedulers.mainThread()) 
     .doOnError { err -> err.printStackTrace() } 
     .toList() 
     .subscribe { userList -> print(userList) } 
} 

而且也是我的文檔中找到更簡單的方法爲迅速:

// Query using a predicate string 
var tanDogs = realm.objects(Dog).filter("color = 'tan' AND name BEGINSWITH 'B'") 

// Query using an NSPredicate 
let predicate = NSPredicate(format: "color = %@ AND name BEGINSWITH %@", "tan", "B") 
tanDogs = realm.objects(Dog).filter(predicate) 
0

你想要一個不同的查詢,但Realm doesn't support them natively yet

但是,您可以獲取數據了一個境界,並自己做重複數據刪除,但你失去領域的自動更新Results類型:

let realm = try! Realm() 
let currentUser = realm.objects(User).filter("me == true").first! 
let uniqueContactNames = Set(currentUser.contacts.valueForKey("name") as! [String]) 

詳情請參閱#1103和建議的解決辦法。

相關問題