2016-04-29 47 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 

您可能希望创建一个单独存储填充值的新领域。