HarmonyOS 鸿蒙Next 数组排序问题

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 数组排序问题

深色代码主题
复制
let test = [‘client_type’ , ‘clientType’]
let testRes = test.sort((a, b) => a.localeCompare(b));

这个结果为什么是 [‘client_type’ , ‘clientType’]
不是应该是 [ ‘clientType’ ,‘client_type’ ]吗?

和java的compareTo运行效果不一致

 


更多关于HarmonyOS 鸿蒙Next 数组排序问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复
JAVA: 
深色代码主题
复制
System.out.println("_".compareTo("T"));// 值为11

ArkTs:

深色代码主题
复制
"_".localeCompare("T");// 值是-1

localeCompare() 用本地特定的顺序来比较两个字符串。java的CompareTo()使用的Unicode编码与arkts使用的编码顺序不同,所以值不同。

想要实现与java相同的功能,调整下函数写法:

深色代码主题
复制
let test = [ 'clientType','client_type' ]
let testRes = test.sort((a, b)=>b.localeCompare(a));
console.log(JSON.stringify(testRes));

更多关于HarmonyOS 鸿蒙Next 数组排序问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


可以使用下面方法实现
深色代码主题
复制
let testRes2 = test.sort((x, y) => {

  if (x < y) {

    return -1;

  } else if (x > y) {

    return 1;

  } else {

    return 0;

  }

})

深色代码主题
复制
      let testRes = test.sort((a, b) => {
        if (a.toLowerCase() === b.toLowerCase()) {
          // 如果忽略大小写后相等,则比较原始字符串
          return a < b ? -1 : 1;
        } else {
          // 否则,忽略大小写比较
          return a.toLowerCase() < b.toLowerCase() ? -1 : 1;
        }
      });

在HarmonyOS鸿蒙Next系统中,数组排序问题可以通过使用系统提供的API或算法库来解决。鸿蒙系统本身并未直接提供特定的数组排序函数,但你可以借助STL(标准模板库)中的排序算法,或者自己实现常见的排序算法如快速排序、归并排序等。

以下是一个利用STL中std::sort函数对数组进行排序的示例:

#include <vector>
#include <algorithm>

int main() {
    std::vector<int> arr = {5, 2, 9, 1, 5, 6};
    std::sort(arr.begin(), arr.end());
    
    // 输出排序后的数组
    for (int num : arr) {
        printf("%d ", num);
    }
    
    return 0;
}

注意,上述代码使用了C++的STL库,并非鸿蒙特有的API,但鸿蒙系统支持C++编程,因此可以直接使用。如果你希望使用纯C语言实现,则需要自己编写排序算法。

在鸿蒙开发中,通常推荐使用C++或eTS(Enhanced TypeScript)等高级语言,以利用更丰富的库和框架支持,提高开发效率。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部