arkts侧hashmap转为native侧

arkts侧map转为native侧map

由于native侧没有处理map的接口,需要先将arkts侧map转换为native侧可处理的类型。

HarmonyOS
2024-05-26 17:58:25
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zhuyanxi

使用的核心API

HashMap

核心代码解释

Arkts侧创建map

let hashmap : HashMap<string,number> = new HashMap() 
hashmap.set("man1",24) 
hashmap.set("man2",25) 
hashmap.set("man3",26)

2. 将创建好的map转为string类型

let iter1 = hashmap.keys() 
let temp1:IteratorResult<string,number>=iter1.next() 
​ 
let iter2 = hashmap.values() 
let temp2:IteratorResult<number>=iter2.next() 
​ 
while (!temp2.done && !temp1.done){ 
​ 
  //console.info("testtag",JSON.stringify(temp1),JSON.stringify(temp2)) 
  testNapi.mymap(JSON.stringify(temp1),JSON.stringify(temp2)) 
​ 
//console.info("keys:",temp1.value,"values:",temp2.value) 
temp1=iter1.next() 
temp2=iter2.next() 
}

3. 在native侧创建入参

napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); 
char str1[1024]; 
size_t str1_len; 
napi_get_value_string_utf8(env, args[0], str1, 100, &str1_len); 
​ 
char str2[1024]; 
size_t str2_len; 
napi_get_value_string_utf8(env, args[1], str2, 100, &str2_len);

4. 构造C++map

//方式一、使用std::map 
std::map<std::string, std::string>testmap; 
testmap.insert(std::make_pair(str1, str2)); 
for (auto &pair : testmap) { 
          OH_LOG_INFO(LOG_APP,"%{public}s+%{public}s",pair.first.c_str(),pair.second.c_str()); 
    } 
//方式二、使用std::unordered_map 
  //   std::unordered_map<std::string, std::string > my_map; 
  //   my_map.insert(std::make_pair(str1, str2)); 
  //   for(auto&pair:my_map){ 
  //       OH_LOG_INFO(LOG_APP,"%{public}s+%{public}s",pair.first.c_str(),pair.second.c_str()); 
  //   } 
  //

std::map与std::unordered_map的区别:

std::map是基于红黑树实现的,它会自动根据键值进行排序,因此在存储时需要保证键值类型支持小于比较运算符。在查找、插入和删除元素时,std::map的时间复杂度为O(log n)。 std::unordered_map则是基于哈希表实现的,它不会自动排序,因此在存储时键值类型不需要支持小于比较运算符。在查找、插入和删除元素时,std::unordered_map的时间复杂度为O(1),但是哈希表的实现会带来额外的空间开销。 总的来说,如果需要对元素进行排序,则应该使用std::map;如果需要快速查找元素,可以使用std::unordered_map。

实现效果

分享
微博
QQ
微信
回复
2024-05-27 22:45:47
相关问题
Native调用ArkTS类函数
329浏览 • 1回复 待解决
ArkTSNative如何进行map数据交互
773浏览 • 1回复 待解决
如何在Native释放ArkTS对象
783浏览 • 1回复 待解决
Native调用ArkTS的全局普通方法
339浏览 • 1回复 待解决
如何在Native构建一个ArkTS对象
662浏览 • 1回复 待解决
native的log获取不到
486浏览 • 1回复 待解决
Native如何打印char指针
596浏览 • 1回复 待解决
TS如何批量传递函数到native
351浏览 • 1回复 待解决
单框架native文件读取权限问题
354浏览 • 1回复 待解决
native如何调用类的静态方法?
589浏览 • 1回复 待解决
Native创建线程是否有限制
739浏览 • 1回复 待解决
Native进行跨模块加载
203浏览 • 1回复 待解决
native如何使用类的静态方法
457浏览 • 1回复 待解决
如何在Native获取APP版本信息
786浏览 • 1回复 待解决