如何使用 Realm 进行排序?
Posted
技术标签:
【中文标题】如何使用 Realm 进行排序?【英文标题】:How to sort using Realm? 【发布时间】:2016-03-20 21:36:13 【问题描述】:我不知道如何使用 Realm 进行排序。我当前的代码是。
data = realm.objects(WorkoutSet)
data = data!.sorted("date")
我想日期将Int
从高到低排序。文档需要更多信息,GitHub 链接会抛出 404
消息。
【问题讨论】:
你能解释一下'sort date and Int from 1 to 0'是什么意思吗?data!
中的感叹号 (!
) 有什么作用?
@JoshPinter 这意味着你在说“我 100% 确定 data
中有一个有效值”,所以继续打开它
@TimCastelijns 谢谢!
【参考方案1】:
您可以在sorted
方法中添加ascending
参数:
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 必须评估每个对象!你应该尽可能坚持结果。如果确实没有其他方法可以对您的项目进行排序,请仅使用上述方法。
【讨论】:
我认为我们需要在 中包装升序:false, as sorted("date", ascending:false) 不,这不正确。ascending
是一个简单的布尔参数。请在上面查看我的更新答案。
啊,是的,正如您所澄清的,它与 Swift 一起使用。使用 Realm javascript,我们需要使用我所说的 sorted("date", ascending:false)【参考方案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;
【讨论】:
问题是关于 Swift 中的 Realm 而不是 java。 我们可以像在 Mongodb 中那样对对象列表(数组)的领域查询结果进行排序吗?以上是关于如何使用 Realm 进行排序?的主要内容,如果未能解决你的问题,请参考以下文章
什么时候/如何排序Realm孩子 Swift中UITableView的属性
如何使用 ObjectMapper 和 Realm 对象声明字典