教程簡介 GWT Highcharts是一個基於 Java 的開源庫,可在 GWT 應用程式中提供優雅且功能豐富的 Highcharts 可視化,並可與 GWT 小部件庫一起使用。 GWT Highcharts入門教程 - 從基本概念到高級概念,從簡單的步驟瞭解GWT Highcharts,其中包括 ...
剛畢業同學,找工作常被問 二維數組轉樹,樹轉二維數組 需要支持無限層級實現,如果你瞭解這個語言那麼實現起來還要一番思考
c++ web框架 paozhu使用 需要實現資料庫表數據到前臺菜單實現,就是這種功能 二維數組轉樹,樹轉二維數組 保存時候樹二維數組,展示時候樹樹狀。
這個技術難點在於無限遞歸,這個樹程式基本原理
現在看看c++怎麼實現的,無限遞歸,家肯定是考慮到結構體 嵌套自己定義。
struct department_outjson_t { unsigned int id = 0; unsigned int parentid = 0; bool isopen = true; bool _is_use = false; std::string title; std::string desc; std::vector<department_outjson_t> children; };
department_outjson_t 就是結構體 嵌套定義
我們看看怎麼實現的,先上代碼,使用了模板
template <typename deps_json_type> concept ishas_isuse_member = requires(deps_json_type m) { m._is_use; }; template <typename deps_json_type> requires ishas_isuse_member<deps_json_type> void array_to_tree(std::vector<deps_json_type> &targetdata, std::vector<deps_json_type> &sourcedata) { if (targetdata.size() == 0) { for (unsigned int i = 0; i < sourcedata.size(); i++) { if (sourcedata[i].parentid == 0) { targetdata.push_back(sourcedata[i]); sourcedata[i]._is_use = true; } } } for (unsigned int i = 0; i < sourcedata.size(); i++) { if (sourcedata[i]._is_use == false) { for (unsigned int j = 0; j < targetdata.size(); j++) { if (targetdata[j].id == sourcedata[i].parentid) { targetdata[j].children.push_back(sourcedata[i]); sourcedata[i]._is_use = true; array_to_tree(targetdata[j].children, sourcedata); } } } } }
就是這樣可以實現了,註意是使用了掃描,怕影響性能,我用一個變數標註,當然也可以用保存地址方式。
順便把 樹轉二維數組也實現了
template <typename deps_json_type> void tree_to_array(std::vector<deps_json_type> &targetdata, std::vector<deps_json_type> &sourcedata, unsigned int parendid = 0) { for (unsigned int i = 0; i < sourcedata.size(); i++) { if (sourcedata[i].parentid == parendid) { if (sourcedata[i].children.size() > 0) { deps_json_type temp = sourcedata[i]; temp.children.clear(); targetdata.push_back(temp); tree_to_array(targetdata, sourcedata[i].children, sourcedata[i].id); } else { targetdata.push_back(sourcedata[i]); } } } }
這樣給前端api多爽,前端也不用自己處理,每次提交整個樹過來就可以了,看完是不是明白了,主要是控制id 和 parentid
更多paozhu有趣特性 以後一一介紹。
✅ 1. 自帶json編解碼不用第三方庫,標準json支持
✅ 2. 支持多功能變數名稱網站
✅ 3. 支持多功能變數名稱ssl 服務端
✅ 4. 支持http/1.1、http/2協議
✅ 5. 支持websocket服務端
✅ 6. 框架自帶websocket推送,支持定時推送到webscoket客戶端
✅ 7. 支持同步httpclient get post
✅ 8. 框架自帶ORM,使用鏈接池方式,目前支持mysql
✅ 9. 框架自帶線程池,和用戶代碼運行的線程池
✅10. 框架使用asio自帶的協程
✅11. 框架特色是I/O 使用協程池 用戶代碼運行使用線程池,類似GO那種調度,只是針對http請求調度
✅12. 框架支持普通文件gzip、br,並支持緩存到磁碟,下次不用cpu再壓縮
✅13. 框架解析URL和POST,解析結果類似PHP GET POST方式獲取內容
✅14. 自帶sendmail類庫
✅15. 生成二維碼(qrcode),需要gd、qrencode庫
✅16. 插件化編程,熱動態更新,使用動態庫方式
✅17. 框架內置通用數據緩存模塊,ORM結果緩存,提高併發能力
✅18. 框架controller目錄註解功能,方便添加URL路由映射,降低入門心智
✅19. 結構和類註解JSON功能,使用json_encode json_decode操作
https://github.com/hggq/paozhu