提问者:小点点

OrderByChild()结果取决于单词的大小写


当前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",
    }
  }
}

因此,它不是按照当前的顺序排序,而是先排序大写字母单词,然后排序小写字母单词并合并列表。


共1个答案

匿名用户

你看到的订单正是我所期望的。 这是因为字符串的自然排序方式。 带有ascii数据的UTF-8字符串根据每个字符的ascii字节值进行排序。 从这个表中可以看到,所有大写字母都在所有小写值之前排序。 这解释了您看到的排序顺序。

如果希望排序顺序为字母顺序而不考虑大小写,则需要存储大小写规范化的名称字符串版本。 存储字符串时,通常以小写的方式进行排序。 例如,不是“aman singh”,而是将“aman singh”存储在一个仅用于排序的特殊子级中。