Как сортировать с помощью Realm?
Я не знаю, как сортировать с помощью Realm. Мой текущий код.
data = realm.objects(WorkoutSet)
data = data!.sorted("date")
Я хочу сортировать дату Int
от больших чисел до низких чисел. Документам требуется дополнительная информация, а ссылка GitHub выдает сообщение 404
.
Ответы
Ответ 1
Вы можете добавить ascending
параметр к sorted
методу:
data = data!.sorted("date", ascending: false)
Это сортирует ваш WorkoutSet, используя поле даты в порядке убывания.
Обновить
С Swift 3 и последней версией RealmSwift это теперь изменилось на:
data = data!.sorted(byKeyPath: "date", ascending: false)
Если вы хотите оценить критерии сортировки самостоятельно, вы можете использовать:
data = data!.sorted(by: { (lhsData, rhsData) -> Bool in
return lshData.something > rhsData.something
})
Но имейте в виду, что сортировка ваших результатов сама по себе возвращает Array
а не объект Realm Results
. Это означает, что нагрузка на производительность и память будет выше, потому что Results
ленивы, и если сортировка с помощью вышеуказанного метода, вы потеряете это ленивое поведение, потому что Realm должен оценивать каждый объект! Вы должны придерживаться результатов, когда это возможно. Используйте этот метод только в том случае, если нет другого способа сортировки ваших товаров.
Ответ 2
Использование Sort.ASCENDING или Sort.DESCENDING
import java.util.Date;
import io.realm.RealmModel;
import io.realm.annotations.Index;
import io.realm.annotations.PrimaryKey;
import io.realm.annotations.RealmClass;
import io.realm.annotations.Required;
@RealmClass
public class Pojo implements RealmModel {
@Index
@Required
@PrimaryKey
protected Long id;
protected Date data_field;
protected int int_field;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
import java.util.List;
import io.realm.Realm;
import io.realm.RealmQuery;
import io.realm.RealmResults;
import io.realm.Sort;
public class Dao {
public List<Pojo> getAllById(Long id) {
Realm realm = Realm.getDefaultInstance();
RealmQuery<Pojo> query = realm.where(Pojo.class);
query.equalTo("pojo_id", id);
RealmResults<Pojo> result = query.findAll();
result = result.sort("data_field", Sort.ASCENDING);
result = result.sort("int_field", Sort.DESCENDING);
//detaching it from realm (optional)
List<Pojo> copied = realm.copyFromRealm(result);
realm.close();
return copied;
}
}