2016-04-29 6 views
0

"FOO1000"、 "FOO1100"、 "FOO150"などの値を持つフィールド "name"(String)を持っていて、Java用のrealm-io(Android、0.89.1)を使用してそれらを取得します。realm.ioの自然な仕分け方法は?

.findAllSorted( "name"、Sort.ASCENDING)を使用すると、自然にソートされません。出力は私が達成したいことは

FOO150
FOO1000
FOO1100

のような自然なソートです

FOO1000
FOO1100
FOO150

になります

自然な並べ替えを行う方法はありますか?

答えて

0

レルムは標準ソートアルゴリズムを使用します。一度に1文字をソートし、5が1より大きいので最後に来ます。文字列の一部を数値として解釈することは期待できません。 数字が150,1000,1100の場合、ソート順に表示されます。数字と組み合わせた文字列が必要な場合は、FOO150の代わりにFOO0150が必要で、期待通りにソートされます。

+0

数字だけの場合、Realmは自動的に "自然な"ソートを使用しますか?知っておいて;) 問題は、私の値は固定されており、私はそれらを変更することはできません。 String + Integerの値を自然にソートするための良い/演奏方法を提案できますか?おそらくRealmResultで2番目のsort()を実行しますか?これは可能ですか? – hardysim

+0

文字列の番号部分でソートする場合は、別のフィールドに分割してそのフィールドのソートを行う必要があります。 –

+0

その後、RealmResultで 'sort()'を複数回呼び出してソート順階層を定義することができます。後続の各呼び出しで新しいレベルが追加され、前のレベルに同じ値がある場合に適用されます。 – marius

0

レルムにはデフォルトで自然な並べ替えがありません。数字の先頭に0を入れると、自然な並べ替えがシミュレートされます。

Foo 100 
Foo 2000 
Foo 40 
Foo 9 

は(あなたが必要とするより多くのゼロを追加)

あなたが個別にパディング値を格納する新しいフィールドを作成したい場合があり、自然にソートされた出力

Foo 0000009 
Foo 0000040 
Foo 0000100 
Foo 0002000 

を生み出す

Foo 0000100 
Foo 0002000 
Foo 0000040 
Foo 0000009 

になり。