TCL --- 列表_part2

0 回顧

列表part0和part1描述了列表的創建,修改,獲取,搜索等相關命令。接下來這篇文章將介紹列表的排序和拼接。通過這三篇文章的描述,詳細大家對列表具有一個詳細并且系統的認識。

1 排序

排序是一個老生常談的話題。最最最常見的排序方式就是升序,降序,unique以及字典等。下面將挨個介紹。

  • lsort命令格式
    lsort <options> list0
    該命令實現列表list0元素排序的功能。其中,option表示命令lsort包含的選項,一般以“-”開頭。常見的option包含:-decreasing,-increasing,-unique, -directionary(非常常用的一個選項),-integer,-real。 它們分別表示降序,升序,唯一,字典,整數(從小到大)和浮點數(從小到大);list0表示列表本身,而不是列表名稱。

    • decreasing表示列表中的元素從大到小排列
    • increasing表示列表中的元素從小到大排列
    • unique表示刪除隊列中重復的元素
    • directionray表示按照字典(數字>小寫字母(a-z)>大寫字母(A-Z),其中數字從小到大,通常用于文件的排序)的方式對列表中的元素進行排序
    • integer表示列表的元素按照從小到大的方式排列,排列的對象只能是整數
    • real表示列表的元素按照從小到大的方式排列,排列的對象是浮點數或者整數。(整數1也可以認為是浮點數1.0)
  • 基礎示例

    # Example1
    # 創建列表x_list0
    set x_list0 [list John Anne Mary Jim]
    # 列表x_list0按照降序排列其中的元素
    lsort -decreasing $x_list0
    # 結果:Mary John Jim Anne# Example2
    # 列表x_list0按照升序排列其中的元素
    lsort -increasing $x_list0
    # 結果: Anne Jim John Mary# Example3
    # 創建列表x_lsit0
    set x_list0 [list B a C 10 2]
    # 列表x_lsit0按照升序排列其中的元素
    lsort -increasing $x_list0
    # 結果: 10 2 B C a# Example4
    # 創建列表x_list1
    set x_lsit1 [list apple  Banana Zebra 123]
    # 列表x_list1按照字典的方式排列其中的元素
    lsort -dictionary $x_lsit1
    # 結果:123 apple Banana# Example5
    # 創建列表x_list1
    set x_list1 [list n1.gif n10.gif n9.gif n11.gif]
    lsort -dictionary $x_lsit2
    # 結果: n1.gif n9.gif n10.gif n11.gif# Example6
    # 創建列表x_list2
    set x_lsit2 [list apple Banana Zebra apple]
    # 刪除列表x_list2中重復的元素
    lsort -unique $x_list2
    # 結果:apple Banana Zebra# Example7
    # 創建列表x_list3
    set x_list3 [list 100 5 20]
    # 列表x_lsit3按照整數的方式從小到大
    lsort -integer $x_list
    # 結果:5 20 100# Example8
    # 創建隊列x_list4
    set x_list4 [list 100 5.23 20.10]
    lsort -real $x_list4
    # 結果: 5.23 20.10 100
    
  • 解析
    Example1~3展示了increasing和decreasing的基礎示例。其中,Example3混合了數字和字母,該實例是想說,increasing和decreasing排序每次比較一個字符的ASCII碼,若相同則比較下一個字符;直到兩者不同為止。字母和數字對應的ASCII碼如下所示:

    數字:0-9: 48-57
    小寫字母:a-z: 65-90
    大寫字母:A-Z: 97-122
    

這就很好的解釋了Example3中為啥“10”會排在“2”的前面。ASIC或者FPGA的follow中通常需要將多個文件進行排序,為此increasing和decreasing就顯得不那么友好,此時推薦使用dictionary。
Example8中100在排序時被當作100.0看待,即Tcl在排序前做了浮點類型的轉換。

2 拼接

  • split命令格式
    split str0 str1
    該命令將字符串str0根據分隔符str1進行切分,并且返回一個列表。或者說,split命令會找到字符串str0中所有的分隔符,返回一個列表,列表中的元素就是分隔符str1之間的元素。其中,分隔符可以是空字符,單個字符或者多個字符;str0是字符串變量,而不是字符串的名字;str1可以是字符串,或者字符串變量。可以分成三種情況理解:
  1. 若分隔符str1是空字符, 則字符串str0的所有字符都被切分,即使是空格。即空格也會被分成一個單一的字符。
  2. 若分隔符str1是單個字符,則字符串str0將被分隔符str1進行切分;切分后的部分組成一個列表。
  3. 若分隔符str1是多個字符,則只要字符串str0中有一個字符和分隔符str1中的字符匹配,則字符串str0被切分一次;若連續兩個字符都和分隔符匹配(分隔符挨個匹配),則進行連續切分,獲得一個空字符;最終切分的元素返回一個列表。
  • 基礎示例

    # 創建字符串x_str0
    set x_str0 xbaybz
    set x_str1 {}
    split $x_str0 $x_str1
    # 結果:x b a y b z# 創建分隔符,并且分隔符是單個字符
    set x_str1 b
    split $x_str0 $x_str1
    # 結果:x ay z# 創建分隔符,并且分隔符多個字符
    set x_str1 ab
    split a {} y z
    
  • 解析
    第一個實例中分隔符是空字符,因此,x_str0中的所有元素都將被切分。
    第二個實例中分隔符是單個字符。字符串xbaybz將被分隔符b切分,切分后的部分組成一個列表,列表的元素為字符串切分后的各個部分。
    第三個實例中分隔符是多個字符。字符串xbaybz將被分隔符ab切分。同學們看到這個結果可能會很意外。其實很簡單,我們把多個分隔符拆成多個單字符的分隔符就可以了。如本實例中,分隔符為“ab”,那咱們就看成兩個分隔符,分別為分隔符a和分隔符b。在切分過程中,字符串xbaybz同時和分隔符a,分隔符b進行匹配。只要其中一個匹配,則進行切分,隨后進入下一個字符的比較。詳細流程如下所示:
    step1: 字符串中的第一個字符x和分隔符a進行匹配,發現不匹配;隨后進行字符x和分隔符b進行匹配,發現不匹配。進入step2;
    step2: 字符b和分隔符a不匹配,隨即進行字符b和分隔符b進行匹配,此時匹配成功,進行切分。故列表的第1個元素是x。進入step3;
    step3: 字符a和分隔符a進行匹配,匹配成功,進行切分。此時獲得一個空元素。故列表的第2個元素是一個空字符串。進入step4;
    step4…
    最終,列表的元素為: a {} y z。

  • join命令格式
    join list0 str0
    該命令可以理解為split命令的逆操作。將列表lsit0中的各個元素按照分隔字符串str0進行拼接,最終獲得一個字符串。其中,分隔字符串可以是任意多個字符串,包括空字符串。另外值得說明的是,list0和str0都是變量,而不是變量名稱。

  • 基礎示例

    # 創建列表x_list0
    set x_list0 [list {} usr include sys types.h]
    # 創建分隔字符串
    set split_str0 "/"
    join  $x_list0 $split_str0
    # 結果: /usr/include/sys/types.h# 創建列表x_list1
    set x_list1 [list 24 112 5]
    # 創建分割字符串
    set split_str1 "+"
    expr [join $x_list1 $split_str1]
    # 結果:141
    
  • 解析
    第一個實例實現了文件路徑的拼接,為了實現usr前面帶一個“/”,待拼接的列表x_list0需要包含一個空元素。即可以實現usr作為根目錄。
    第二個實例實現列表數字的累計,是一個較為特殊的用法。該實例中,首先將列表的元素按照分割字符串“+”進行拼接;隨后將拼接好的字符串傳入expr;最后經過expr的計算,獲得最終的結果。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/91852.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91852.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/91852.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Kafka 單機多 Broker 實例集群搭建 | 詳情

全文目錄&#xff1a;開篇語前言1. Kafka 集群架構2. 環境要求2.1 安裝 Java2.2 安裝 Zookeeper3. 安裝 Kafka4. 創建 Topic4.1 查看創建的 Topic5. 測試 Kafka 集群5.1 生產者&#xff08;Producer&#xff09;測試5.2 消費者&#xff08;Consumer&#xff09;測試6. 小結文末…

Ajax——異步前后端交互提升OA系統性能體驗

本文介紹了Ajax中的基礎使用&#xff0c;包括XMLHttpRequest的狀態變化、并使用BMI 場景的示例進行介紹&#xff0c;以及結合 DAO 和 Servlet 處理OA系統復雜業務邏輯和JSON數據的處理等等。 本文目錄一、Ajax 基礎html頁面二、 XMLHttpRequestXMLHttpRequest的狀態變化同步和異…

【最后一個單詞的長度】

思路 逆向遍歷&#xff1a; 從字符串末尾開始向前遍歷&#xff0c;跳過末尾的空格&#xff0c;直到找到非空格字符。 遇到非空格字符時開始計數&#xff0c;直到再次遇到空格或字符串開頭。 狀態標記&#xff1a; 使用 state 標記是否已經進入最后一個單詞的計數階段&#xff1…

OpenCV學習 day3

一、灰度實驗 將彩色圖像轉換為灰度圖像的過程稱為灰度化&#xff0c;這種做法在圖像處理中和計算機視覺領域非常常見 1、灰度圖 灰度圖是一種 單通道圖像&#xff0c;每個像素僅存儲 亮度信息&#xff08;0純黑&#xff0c;255純白&#xff09;&#xff0c;沒有顏色信息&#…

基于單片機一氧化碳CO檢測/煤氣防中毒檢測報警系統

傳送門 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目速選一覽表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目功能速覽 概述 基于單片機的CO檢測系統通過傳感器實時監測環境中的一氧化碳濃度&#xff0c;結合信號處理電路與…

前端-移動Web-day3

目錄 1、視口 2、rem體驗 3、rem基本使用 4、媒體查詢 5、rem適配 6、rem布局 7、less-體驗 8、less-注釋 9、less-運算 10、less-嵌套 11、less-變量 12、less-導入 13、less-導出 14、less-禁止導出 15、案例-極速問診 1、視口 <!DOCTYPE html> <htm…

【正點原子K210連載】第二十四章 按鍵輸入實驗 摘自【正點原子】DNK210使用指南-CanMV版指南

第二十四章 按鍵輸入實驗 本章實驗將介紹如何使用CanMV讓Kendryte K210獲取板載按鍵的狀態。通過本章的學習&#xff0c;讀者將學習到在CanMV下讀取Kendryte K210的GPIO上的高低電平狀態。 本章分為如下幾個小節&#xff1a; 14.1 maix.GPIO模塊介紹 14.2 硬件設計 14.3 程序設…

基于springboot/java/VUE的旅游管理系統/旅游網站的設計與實現

用戶&#xff1a;注冊&#xff0c;登錄&#xff0c;旅游景點&#xff0c;酒店信息&#xff0c;旅游線路&#xff0c;公告信息&#xff0c;留言板&#xff0c;后臺管理&#xff0c;個人中心&#xff0c;門票預訂管理&#xff0c;酒店預訂管理管理員&#xff1a;登錄&#xff0c;…

Python Excel 高階教程:使用 Spire.XLS 插入、修改和刪除迷你圖

Python 操作 Word 文檔&#xff1a;主流庫對比與選擇指南 在辦公自動化、報告生成、數據處理等領域&#xff0c;利用 Python 程序化地創建、讀取或修改 Microsoft Word 文檔 (.docx 格式) 是一項非常實用的技能。Python 生態中有多個優秀的庫可以完成這項任務&#xff0c;但它…

WebPages PHP:深入解析PHP在網頁開發中的應用

WebPages PHP&#xff1a;深入解析PHP在網頁開發中的應用 引言 隨著互聯網技術的飛速發展&#xff0c;PHP作為一種開源的腳本語言&#xff0c;已經在網頁開發領域占據了舉足輕重的地位。本文將深入探討PHP在網頁開發中的應用&#xff0c;包括其優勢、常用框架、開發流程以及未來…

【深度學習】【三維重建】windows11環境配置PyTorch3d詳細教程

【深度學習】【三維重建】windows11環境配置PyTorch3d詳細教程 文章目錄【深度學習】【三維重建】windows11環境配置PyTorch3d詳細教程前言確定版本對應關系源碼編譯安裝Pytorch3d總結前言 本人windows11下使用搭建PyTorch3d環境&#xff0c;故此以詳細教程以該算法依賴的環境…

SpringBoot+Mybatis+MySQL+Vue+ElementUI前后端分離版:日志管理(四)集成Spring Security

目錄 一、前言 二、后端開發及調整 1.日志管理開發 2.配置調整 3.日志入庫&#xff08;注解、切面&#xff09; 三、前端調整 1.日志管理開發 四、附&#xff1a;源碼 1.源碼下載地址 五、結語 一、前言 此文章在上次調整的基礎上開發后端管理系統的用戶請求日志功能&…

ceph 14.2.22 nautilus Balancer 數據平衡

Ceph Balancer (upmap 模式) 啟用與配置 在 Ceph Nautilus (14.2.22) 版本中啟用和配置 Balancer 的完整步驟 1. 前提檢查 檢查集群的初始狀態和版本。 集群狀態 (ceph -s)cluster:id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxhealth: HEALTH_OKservices:mon: 3 daemons, quo…

在Linux上對固態硬盤進行分區、格式化和掛載的步驟

在Linux上對固態硬盤進行分區、格式化和掛載的步驟如下&#xff1a; 插入固態硬盤&#xff1a;將固態硬盤插入計算機的SATA或M.2接口。 確認固態硬盤被識別&#xff1a;打開終端&#xff0c;輸入以下命令查看硬盤是否被系統識別 fdisk -l 查找硬盤列表中的固態硬盤&#xf…

用Unity結合VCC更改人物模型出現的BUG

1、上傳模型時出現錯誤經過排查是因為服裝發型預制體放到人物模型上之后&#xff0c;物體上自動多了一個空腳本&#xff0c;懷疑是VRC工具箱自動添加的。解決方法&#xff1a;在上傳前將帶有空腳本的物體上的組件刪除即可2、添加頭發時出現模型碰撞錯誤按照【【VRCHAT】從零開始…

k8s之DevicePlugin

解密 Kubernetes Device Plugin&#xff1a;讓容器輕松駕馭特殊硬件 在容器化技術飛速發展的今天&#xff0c;容器憑借輕量、隔離、可移植的特性成為應用部署的主流選擇。但在實際應用中&#xff0c;當容器需要訪問 GPU、FPGA 等特殊硬件資源時&#xff0c;事情就變得不那么簡單…

動態規劃Day7學習心得

今天給動態規劃掃個尾&#xff0c;還有兩題。 第一道&#xff1a;647. 回文子串 - 力扣&#xff08;LeetCode&#xff09; 暴力解法 兩層for循環&#xff0c;遍歷區間起始位置和終止位置&#xff0c;然后還需要一層遍歷判斷這個區間是不是回文。所以時間復雜度&#xff1a;O…

SpringCloud實戰:機器人對戰系統架構

基于Spring Cloud的機器人對戰 以下是基于Spring Cloud的機器人對戰實例相關案例和技術實現方向的整理,涵蓋微服務架構設計、通信機制及典型應用場景: 分布式對戰系統架構 采用Spring Cloud Alibaba+Nacos實現服務注冊與發現,每個機器人實例作為獨立微服務部署。通過Open…

LLM 核心能力解構與項目實踐指南

大語言模型&#xff08;LLM&#xff09;的爆發式發展&#xff0c;本質上是其核心能力在產業場景中的規模化驗證。作為技術博主&#xff0c;本文將系統拆解 LLM 的六大核心能力&#xff0c;結合工業級項目案例&#xff0c;提供從能力映射到工程實現的完整技術路徑&#xff0c;并…

retro-go 1.45 編譯及顯示中文

最近做了個使用 retro-go 的開源掌機 基于ESP32-S3的C19掌機&#xff08;適配GBC外殼&#xff09; - 立創開源硬件平臺 &#xff0c;做完后用提供的固件發現屏幕反顯了&#xff0c;估計是屏幕型號不太對&#xff0c;隨即自己拉 retro-go 官方庫來編譯&#xff0c;拉取的最新的 …