当前firebase数据库为:
{
"user_type" : {
"number1" : {
"name" : "Puneet",
},
"number2" : {
"name" : "AMAN SINGH",
},
"number3" : {
"name" : "harsha",
},
"number4" : {
"name" : "abhishek",
},
"number5" : {
"name" : "Satya",
},
}
}
我想按姓名升序对列表进行排序。 所以这个代码是:
myRef.child("user_type").orderByChild("name");
但它返回的结果为:
{
"admin" : {
"number2" : {
"name" : "AMAN SINGH",
},
"number1" : {
"name" : "Puneet",
},
"number5" : {
"name" : "Satya",
},
"number4" : {
"name" : "abhishek",
},
"number3" : {
"name" : "harsha",
}
}
}
但我期待以下订单:
{
"admin" : {
"number2" : {
"name" : "AMAN SINGH",
},
"number4" : {
"name" : "abhishek",
},
"number3" : {
"name" : "harsha",
}
"number1" : {
"name" : "Puneet",
},
"number5" : {
"name" : "Satya",
}
}
}
因此,它不是按照当前的顺序排序,而是先排序大写字母单词,然后排序小写字母单词并合并列表。
你看到的订单正是我所期望的。 这是因为字符串的自然排序方式。 带有ascii数据的UTF-8字符串根据每个字符的ascii字节值进行排序。 从这个表中可以看到,所有大写字母都在所有小写值之前排序。 这解释了您看到的排序顺序。
如果希望排序顺序为字母顺序而不考虑大小写,则需要存储大小写规范化的名称字符串版本。 存储字符串时,通常以小写的方式进行排序。 例如,不是“aman singh”,而是将“aman singh”存储在一个仅用于排序的特殊子级中。