2015-12-15 5 views
11

レルムを使用してソートする方法がわかりません。私の現在のコードはです。レルムを使用してソートする方法は?

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

私は低い数字に高い数字からIntをソートしたいです。ドキュメントにはより多くの情報が必要で、GitHubリンクには404というメッセージがスローされます。

+0

「ソートの日付とIntの値が1から0まで」という意味を教えてください。 – joern

+0

私はちょうどそれを編集しました。 –

+0

感嘆符( '!')は 'data!'で何をしますか? –

答えて

28

あなたはsorted方法にascendingパラメータを追加することができます

data = data!.sorted("date", ascending: false) 

これは降順で日付フィールドを使用してWorkoutSetをソートします。スウィフト3および最新RealmSwiftバージョンで

更新

これは今に変更されました:あなたはソート基準を自分で評価したい場合は、使用することができ

data = data!.sorted(byKeyPath: "date", ascending: false) 

data = data!.sorted(by: { (lhsData, rhsData) -> Bool in 
    return lshData.something > rhsData.something 
}) 

しかし、結果を自分で並べ替えると、領域の代わりにArrayが返されることに注意してくださいオブジェクト。これは、Resultsが怠惰で、上記の方法でソートすると、Realmが各オブジェクトを評価する必要があるため、その怠惰な動作を失うため、パフォーマンスとメモリのオーバーヘッドが発生することを意味します。可能であれば、結果に固執すべきです。アイテムを並べ替える方法が他にない場合は、上記の方法を使用してください。 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

私は昇順で囲む必要があると思います:{}で偽(並べ替え)( "日付"、{昇順:偽}) – NgocDB

+0

いいえ、それは正しくありません。 'ascending'は単純なブール値のパラメータです。上記の私の更新答えをご覧ください。 – joern

+0

ああ、あなたが明確にしたように、それはスウィフトと一緒です。レルムJavascriptを使用すると、ソート済み(「日付」、「昇順:偽」)と指定したとおりに使用する必要があります – NgocDB

0

0

realmResults.sort( "日付"、true)を使用して

関連する問題