【问题标题】:OrderByChild() results is depending on case of the wordsOrderByChild() 结果取决于单词的大小写
【发布时间】:2020-10-01 05:56:52
【问题描述】:

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

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

【问题讨论】:

    标签: android firebase sorting firebase-realtime-database sql-order-by


    【解决方案1】:

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

    如果您希望排序顺序按字母顺序排列而不考虑大小写,则需要存储名称字符串的一个版本,其中大小写标准化。通常将字符串存储为全小写的排序方式。例如,您可以将“aman singh”存储在仅用于排序的特殊子项中,而不是“AMAN SINGH”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-29
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      • 2021-03-20
      • 1970-01-01
      • 2012-09-01
      相关资源
      最近更新 更多