golang內置包strings和bytes中的Map函數的理解和使用示例

? ? ? ? 在go的標志內置包strings和bytes中都有一個函數Map,? 這個函數的作用是:?將輸入字符串/字節切片中的每個字符使用函數處理后映射后返回一份字符串/字節切片的副本,如果函數中的某個字符返回負數刪除對應的字符

? ? ? ? 作用很簡單,當時對于新手來說要理解他還是有一定的困難,而且這個map在其他語言里面也非常常見,特別是在大數據處理時類似的map用法隨處可見。

? ? ? ? 注意這里的rune, 在go語言里面rune代表的是一個 int32 類型的數字,他在這里對應的就是unicode碼表里面的數字碼,計算機世界里面的每一個字母數字字符都有一個對應的unicode碼。 1個rune可表示3個字節。而byte只能表示1個字節, 我們的1個漢字就需要3個字節來表示,這也是go里面我們處理漢字是必須要使用rune來表示,否則就可能會亂碼的原因。

golang中的2個Map函數原型:

這2個Map函數僅入參函返回不一樣,mapping處理函數是一模一樣

strings包中的Map函數
func Map(mapping func(rune) rune, s string) string? ?

bytes包中的Map函數

func Map(mapping func(r rune) rune, s []byte) []byte
?

Map函數使用示例

官方的示例太晦澀,以下是一個簡單易懂的一個Example測試用例的示例:

將字符串中的你好替換為hi

// 測試用例 xxx_test.go
func ExampleDemo() {str := "你好,我是golang!"strMap := strings.Map(func(r rune) rune {// 注意這里的參數 r 就代表一個字符(包括多字節的字符,如漢字),// rune代表的是字符對應的ascii碼值,所以可以直接進行碼值比較和運算switch {case r == '你': // 注意這里的運算對象只能使用單引號,且只能是一個字符return 'h' // 將 你 替換為 hcase r == '好':return 'i'default:return r // 默認原樣返回}}, str)fmt.Println(strMap) // output: hi,我是golang!
}

從以上示例中可以清除的看到 Map函數將我們的字符串??"你好,我是golang!" 替換為了?"hi,我是golang!"??

官方的示例:

package mainimport ("fmt""strings"
)func main() {rot13 := func(r rune) rune {switch {case r >= 'A' && r <= 'Z':return 'A' + (r-'A'+13)%26case r >= 'a' && r <= 'z':return 'a' + (r-'a'+13)%26}return r}fmt.Println(strings.Map(rot13, "'Twas brillig and the slithy gopher..."))
}

原理是一模一樣的,但是返回的一堆看不明白的字符串?'Gjnf oevyyvt naq gur fyvgul tbcure...? 可能會把你搞得不知所措......

參考:

https://pkg.go.dev/strings#Map?
https://pkg.go.dev/bytes#Map?

https://dev.tekin.cn

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

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

相關文章

Qt_tftp(未總結)

記錄一下tftp傳輸,日后總結 #ifndef CLIENTWORK_H #define CLIENTWORK_H#include <QObject> #include <QThread>#include <QHostAddress>

關于C的\r回車在不同平臺的問題

首先我們需要搞明白\r和\n是兩回事 \r是回車&#xff0c;前者使光標到行首&#xff0c;&#xff08;carriage return&#xff09; \n是換行&#xff0c;后者使光標下移一格&#xff0c;&#xff08;line feed&#xff09; Linux平臺下 #include <stdio.h> int main()…

Unidac連接Excel文件

終于找到一個連接字符串&#xff0c;記錄一下 UniConnection1.ConnectString : Format(Provider NameODBC;Server"DRIVERMicrosoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb); DBQ%s", [FileName]); UniConnection1.connected:true; UniConnection1.gettable…

神經網絡不確定性綜述(Part I)——A survey of uncertainty in deep neural networks

相關鏈接&#xff1a; 神經網絡不確定性綜述(Part I)——A survey of uncertainty in deep neural networks-CSDN博客 神經網絡不確定性綜述(Part II)——Uncertainty estimation_Single deterministic methods-CSDN博客 神經網絡不確定性綜述(Part III)——Uncertainty est…

Python實現xml解析并輸出到Excel上

1.編寫xml文件 2.使用Python的ElementTree模塊來解析XML import xml.etree.ElementTree as ET from openpyxl import Workbook # 解析XML函數 def parse_xml(xml_file):tree ET.parse(xml_file)root tree.getroot() --打開根節點data []for user in root.findall(Users/Us…

1.手動LogisticRegression模型的訓練和預測

通過這個示例&#xff0c;可以了解邏輯回歸模型的基本原理和訓練過程&#xff0c;同時可以通過修改和優化代碼來進一步探索機器學習模型的訓練和調優方法。 過程: 生成了一個模擬的二分類數據集&#xff1a;通過隨機生成包含兩個特征的數據data_x&#xff0c;并基于一定規則生…

秋招突擊——算法打卡——5/25、5/26——尋找兩個正序數組的中位數

題目描述 自我嘗試 首先&#xff0c;就是兩個有序的數組進行遍歷&#xff0c;遍歷到一半即可。然后求出均值&#xff0c;下述是我的代碼。但這明顯是有問題的&#xff0c;具體錯誤的代碼如下。計算復雜度太高了&#xff0c;O&#xff08;n&#xff09;&#xff0c;所以會超時&…

數據結構--《二叉樹》

二叉樹 1、什么是二叉樹 二叉樹(Binar Tree)是n(n>0)個結點的優先集合&#xff0c;該集合或者為空集(稱為空二叉樹)&#xff0c;或者由一個根結點和兩顆互不相交的、分別稱為根結點的左子樹和右子樹的二叉樹構成。 這里給張圖&#xff0c;能更直觀的感受二叉樹&#xff1…

GDPU JavaWeb mvc模式

搭建一個mvc框架的小實例。 簡易計算器 有一個名為inputNumber.jsp的頁面提供一個表單&#xff0c;用戶可以通過表單輸入兩個數和運算符號提交給Servlet控制器&#xff1b;由名為ComputerBean.java生成的JavaBean負責存儲運算數、運算符號和運算結果&#xff0c;由名為handleCo…

C#中獲取FTP服務器文件

1、從ftp下載pdf的方法 public static void DownloadPdfFileFromFtp(string ftpUrl,string user,string password string localPath) { // 創建FtpWebRequest對象 FtpWebRequest request (FtpWebRequest)WebRequest.Create(ftpUrl); request.Method WebRequestMethods.Ftp…

簡單好用的文本識別方法--付費的好用,免費的更有性價比-記筆記

文章目錄 先說付費的進入真題&#xff0c;免費的來喏&#xff01;PixPin微信 先說付費的 直達網址!!! 進入真題&#xff0c;免費的來喏&#xff01; PixPin 商店里就有 使用示例&#xff1a; 可以看到&#xff1a;貼在桌面上的圖片可以復制圖片中的文字&#xff0c;真的很…

深入了解ASPICE標準:提升汽車軟件開發與質量管理的利器

隨著汽車行業的快速發展和技術創新&#xff0c;汽車軟件的開發和質量管理的重視程度不斷提升。ASPICE&#xff08;Automotive Software Process Improvement and Capability Determination&#xff09;標準作為一種專門針對汽車軟件開發過程的改進和能力評定的框架&#xff0c;…

Springboot+Vue+ElementUI開發前后端分離的員工管理系統01--系統介紹

項目介紹 springboot_vue_emp是一個基于SpringbootVueElementUI實現的前后端分離的員工管理系統 功能涵蓋&#xff1a; 系統管理&#xff1a;用戶管理、角色管理、菜單管理、字典管理、部門管理出勤管理&#xff1a;請假管理、考勤統計、工資發放、工資統計、離職申請、個人資…

8.Redis之hash類型

1.hash類型的基本介紹 哈希表[之前學過的所有數據結構中,最最重要的] 1.日常開發中,出場頻率非常高. 2.面試中,非常重要的考點, Redis 自身已經是鍵值對結構了Redis 自身的鍵值對就是通過 哈希 的方式來組織的 把 key 這一層組織完成之后, 到了 value 這一層~~ value 的其中…

最重要的時間表示,柯橋外貿俄語小班課

в第四格 1、與表示“鐘點”的數詞詞組連用 例&#xff1a; в шесть часов утра 在早上六點 в пять тридцать 在五點半 2、與表示“星期”的名詞連用 例&#xff1a; в пятницу 在周五 в следующий понедельник …

包和依賴管理:Python的pip和conda使用指南

包和依賴管理&#xff1a;Python的pip和conda使用指南 對于Python新手來說&#xff0c;包和依賴管理可能是一個令人困惑的概念。但不用擔心&#xff0c;本文將用淺顯易懂的語言&#xff0c;詳細介紹如何使用Python的兩個主要包管理工具&#xff1a;pip和conda。我們還會探討在安…

為 AWS 子賬戶添加安全組修改權限

文章目錄 步驟 1&#xff1a;創建 IAM 策略步驟 2&#xff1a;附加策略到子賬戶步驟 3&#xff1a;驗證權限 本文檔將操作如何為 AWS 子賬戶&#xff08;IAM 用戶或角色&#xff09;添加修改安全組的權限&#xff0c;包括 AuthorizeSecurityGroupIngress 和 RevokeSecurityGr…

解決uniApp 中不能直接使用 Axios 的問題

最近在使用 uniapp 進行小程序開發的時候&#xff0c;發現 uniapp 不能直接使用 axios&#xff0c;需要自己進行封裝一個 http 庫使用&#xff0c;于是有了這個項目。 項目地址&#xff1a;https://www.npmjs.com/package/uni-app-wxnetwork-tool 該包的功能介紹&#xff1a; u…

String類為什么設計成不可變的?

目錄 緩存 安全性 線程安全 hashCode緩存 性能 其實這個問題我們可以通過緩存、安全性、線程安全和性能幾個維度去解析。 緩存 字符串是Java最常用的數據結構&#xff0c;我們都知道字符串大量創建是非常耗費資源的&#xff0c;所以Java中就將String設計為帶有緩存的功能…

軟考 系統架構設計師之考試感悟2

接前一篇文章&#xff1a;軟考 系統架構設計師之考試感悟 今天是2024年5月25號&#xff0c;是個人第二次參加軟考系統架構師考試的正日子。和上次一樣&#xff0c;考了一天&#xff0c;身心俱疲。天是陰的&#xff0c;心是沉的&#xff0c;感覺比上一次更加沉重。仍然有諸多感悟…