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.mzph.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;感觉比上一次更加沉重。仍然有诸多感悟…