2016-04-29 49 views
0

我有一個類似「FOO1000」,「FOO1100」,「FOO150」等字段的「名稱」(字符串),並使用realm-io for Java(Android,0.89.1))來獲取它們。如何在realm.io中自然排序?

當我使用.findAllSorted(「名稱」,Sort.ASCENDING)時,他們沒有自然排序。輸出將是

FOO1000
FOO1100
FOO150

我想實現的是一個自然排序像

FOO150
FOO1000
FOO1100

有沒有辦法自然排序?

回答

0

Realm使用標準排序算法。它會一次對一個字符進行排序,並且由於5大於1,所以最後排列。你不能指望把一個字符串的部分解釋爲一個數字。 如果您將150,1000,1100作爲一個數字並進行排序,您將得到您期望的排序順序。如果您需要將字符串與數字組合,您應該使用FOO0150而不是FOO150,並按照您的預期進行排序。

+0

好吧,如果我只有數字,Realm會自動使用「自然」排序?很高興知道;) 問題是,我的價值觀是固定的,我無法改變它們。你能建議一個好的/高性能的方式來讓我的String + Integer值自然排序嗎?也許在RealmResult上運行第二種排序()?這可能嗎? – hardysim

+0

如果要按字符串的數字部分進行排序,則必須將其分成單獨的字段,然後對該字段進行排序。 –

+0

您可以隨後在RealmResult上多次調用sort()來定義排序順序層次結構,其中每個後續調用都將添加一個新的級別,如果前一級別的值相同,則會應用該級別。 – marius

0

默認情況下,領域沒有自然排序。用前導零填充數字將模擬自然排序。

例如

Foo 100 
Foo 2000 
Foo 40 
Foo 9 

變成(添加更多的零根據您的需要)

Foo 0000100 
Foo 0002000 
Foo 0000040 
Foo 0000009 

這產生了自然排序輸出

Foo 0000009 
Foo 0000040 
Foo 0000100 
Foo 0002000 

您可能希望創建一個單獨存儲填充值的新領域。