2015-12-15 89 views
11

我不知道如何使用Realm进行排序。我目前的代码是。如何使用领域进行排序?

data = realm.objects(WorkoutSet) 
data = data!.sorted("date") 

我想的Int从高数量低的数字排序日期。该文档需要更多信息,并且GitHub链接会抛出一条404消息。

+0

你能解释一下'sort date和Int from 1 to 0'是什么意思吗? – joern

+0

我刚编辑它。 –

+0

'data!'中的感叹号('!')做了什么? –

回答

28

您可以在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必须评估每个对象!只要可能,你应该坚持结果。如果确实没有其他方法来分拣物品,请仅使用上述方法。

+0

我认为我们需要在{}中包含升序:false,按排序(“date”,{rise:false}) – NgocDB

+0

不,这是不正确的。 'ascending'是一个简单的布尔参数。请参阅上面我更新的答案。 – joern

+0

啊,是的,它是与斯威夫特,你澄清。使用Realm Javascript时,我们需要按照我所说的排序(“date”,{rise:false})来使用 – NgocDB

0

使用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; 
    } 
} 
0

realmResults.sort( “日期”,TRUE);