【问题标题】:How to sort using Realm?如何使用 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 谢谢!

标签: database swift sorting realm


【解决方案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 中那样对对象列表(数组)的领域查询结果进行排序吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
相关资源
最近更新 更多