当前位置: 首页 > news >正文

数组和切片实战

1).检查某个值是否在数组中:

如果要检查某个值是否在在数组或切片中.则需要根据相应的类型进行逐个对比.

示例:

package main import ( "encoding/csv" "fmt" "math/rand" "os" "regexp" "strings" "time" "unicode/utf8" ) func main() { nameList := []string{"Barry", "Shirdon", "Jack"} str1 := "Barry" str2 := "Go" result := Exist(str1, nameList) fmt.Println(result) result2 := Exist(str2, nameList) fmt.Println(result2) } func Exist(target string, array []string) bool { for _, v := range array { if target == v { return true } } return false }

执行结果:

2).查找一个元素在数组中的位置:

如果要查找一个元素在数组中的位置.首先通过reflect包的ValueOf()函数获取数组的值.然后用for循环遍历数组对值进行比较.如果相等.返回元素的索引值.

示例:

package main import ( "encoding/csv" "fmt" "math/rand" "os" "reflect" "regexp" "strings" "time" "unicode/utf8" ) func main() { a := make([]int, 6) for i := 0; i < 6; i++ { a[i] = i + 2 } index := arrayPosition(a, 6) fmt.Println(index) } func arrayPosition(arr interface{}, d interface{}) int { array := reflect.ValueOf(arr) for i := 0; i < array.Len(); i++ { v := array.Index(i) if v.Interface() == d { return i } } return -1 }

执行结果:

3).查找数组中最大值或最小值:

在Go语言中.如果要查找数组中最大值或最小值元素.可以通过for循环逐个比较元素的大小.发现更大的数则进行交换.

示例:

package main import ( "encoding/csv" "fmt" "math/rand" "os" "reflect" "regexp" "strings" "time" "unicode/utf8" ) func main() { var array = [...]int{1, -2, 88, 66, 16, 68} maxValue := array[0] maxValueIndex := 0 for i := 0; i < len(array); i++ { //比较元素大小.如果发现更大的数.则进行交换. if maxValue < array[i] { maxValue = array[i] maxValueIndex = i } } fmt.Println("maxValue=% v maxValue=%v \n", maxValue, maxValueIndex) }

执行结果:

4).随机打乱数组:

把一个数组随机打乱的实质就是"洗牌问题"."洗牌问题"不仅追求速度.还要求洗的足够开.

Fisher-Yates随机置乱算法也称高纳德置乱算法.核心思想是从1~n之间随机出一个数和最后一个数(n)交换.然后从1~n-1之间随机出一个数和倒数第二个数(n-1)交换.这个算法生成的随机排列是等概率的.所以每个排列都有可能.

示例:

package main import ( "encoding/csv" "errors" "fmt" "math/rand" "os" "reflect" "regexp" "strings" "time" "unicode/utf8" ) func init() { rand.Seed(time.Now().Unix()) } func main() { str := []string{ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", } a, _ := RandomInt(str, 5) fmt.Println(a) } func RandomInt(str []string, length int) (string, error) { if len(str) <= 0 { return "", errors.New("字符串长度不能小于0") } if length <= 0 || len(str) <= length { return "", errors.New("参数长度非法") } for i := len(str) - 1; i > 0; i-- { num := rand.Intn(i + 1) str[i], str[num] = str[num], str[i] } str1 := "" for i := 0; i < length; i++ { str1 += str[i] } return str1, nil }

执行结果:

5).删除数组中重复的元素:

给定一个数组.需要删除重复出现的元素.使得每个元素只出现一次.并返回移除后数组的新长度.不需要额外的数组空间.必须通过直接修改输入数组的方式.并在使用空间复杂度为O(1)的条件下完成.

示例:

package main import ( "encoding/csv" "errors" "fmt" "math/rand" "os" "reflect" "regexp" "strings" "time" "unicode/utf8" ) func main() { array := []int{1, 6, 6, 8} res := removeDuplicates(array) fmt.Println(res) } func removeDuplicates(array []int) []int { //如果空切片.返回nil. if len(array) == 0 { return nil } //用两个标记来比较相邻位置的值. //如果一样.则继续. //如果不一样.则把right指向的值赋值给left下一位. left, right := 0, 1 for ; right < len(array); right++ { if array[left] == array[right] { continue } left++ array[left] = array[right] } return array[:left+1] }

执行结果:

6).一维数组的排序:

在Go语言中.只要实现了sort.Interface接口.即可通过sort包内的函数完成排序 查找等操作.并且sort包已经把[]int []float64 []string三种类型都实现了该接口.

sort.Sort()函数是递增排序.如果要实现递减排序.则要用sort.Reverse()函数.

7).二维数组排序:

对于二维数组排序.可以通过实现sort.Interface接口算法来实现.

给定一个二维数组.将这个二维数组按第i列(i从1开始)排序.如果第i列相同.即对相同的行按第i+1列的元素排序.如果第i+1列的元素也相同.则继续比较第i+2列.以此类推.直到最后一列.如果第i列到最后一列都相同.则按原序排列.

示例:

package main import ( "encoding/csv" "errors" "fmt" "math/rand" "os" "reflect" "regexp" "sort" "strings" "time" "unicode/utf8" ) func main() { //二维数组. nums := [][]int{{1, 9, 5}, {2, 3, 6}, {3, 6, 9}, {1, 8, 3}} firstIndex := 1 result := ArraySort(nums, firstIndex) fmt.Println(result) } func ArraySort(numArray [][]int, firstIndex int) [][]int { //检查. if len(numArray) <= 1 { return numArray } if firstIndex < 0 || firstIndex > len(numArray[0])-1 { fmt.Println("Warning:Param firstIndex should between 0 and len(numArray)-1.thr original array is returned.") return numArray } //排序. in := &IntArray{numArray, firstIndex} sort.Sort(in) return in.mArr } type IntArray struct { mArr [][]int firstIndex int } // 实现sort.Interface接口. func (in *IntArray) Len() int { return len(in.mArr) } func (in *IntArray) Swap(i, j int) { in.mArr[i], in.mArr[j] = in.mArr[j], in.mArr[i] } func (in *IntArray) Less(i, j int) bool { arr1 := in.mArr[i] arr2 := in.mArr[j] // 取两行较短的长度,防止越界 minLen := len(arr1) if len(arr2) < minLen { minLen = len(arr2) } for idx := in.firstIndex; idx < minLen; idx++ { if arr1[idx] != arr2[idx] { return arr1[idx] < arr2[idx] } } return i < j }

执行结果:

8).三维数组生成:

创建一个三维数组生成器.需要通过make()函数和for-range循环语句配合实现.

示例:

package main import ( "encoding/csv" "errors" "fmt" "math/rand" "os" "reflect" "regexp" "sort" "strings" "time" "unicode/utf8" ) func main() { x := make3D(2, 2, 3) x[1][0][2] = 9 fmt.Println(x) } func make3D(m, n, p int) [][][]float64 { buf := make([]float64, m*n*p) x := make([][][]float64, m) for i := range x { x[i] = make([][]float64, n) for j := range x[i] { x[i][j] = buf[:p:p] buf = buf[p:] } } return x }

执行结果:

语雀地址https://www.yuque.com/itbosunmianyi/xg8vfe?

《Go.》 密码:xbkk 欢迎大家访问.提意见.

往事落满了尘埃.

http://www.jsqmd.com/news/707633/

相关文章:

  • DTVM框架解析:基于Vue ue.js 3与TypeScript的电视应用开发实践
  • 哪家北京核磁医院专业?2026年4月推荐评测口碑对比五家服务领先骨关节运动损伤影像评估 - 品牌推荐
  • DistilBart模型解析与文本摘要实战指南
  • 快速上手像素剧本圣殿:三步完成你的第一个剧本创作
  • 巴拿马电源在数据中心的应用
  • 像素剧本圣殿惊艳效果:Qwen2.5-14B-Instruct生成的8-Bit风格剧本PDF导出样例
  • Phi-3 Forest Laboratory 低成本运行方案:在消费级GPU上的部署与优化
  • dockerfile系列(六) 进阶技巧与调试-Dockerfile的黑魔法
  • AI驱动的代码安全审计工具:混合扫描策略与CI/CD集成实践
  • 测试时数据增强在表格数据中的实践与优化
  • Java调用AI做智能数据清洗:实战文本纠错与格式化
  • 终极指南:如何用CefFlashBrowser轻松玩转经典Flash游戏和网页内容
  • PyTorch 中,Tensor viewpermutetranspose 接口,都是用来做什么的
  • 2026年4月酒店帐篷厂家推荐:口碑好的产品景区搭建防台风案例 - 品牌推荐
  • Phi-3.5-mini-instruct本地化部署详解:使用Ollama管理模型服务
  • MyBatis学习(三)
  • TransformerUNet 医学图像分割:牙齿 X 光 + PyTorch 全链路
  • 如何高效使用DownKyi:B站视频下载与管理的终极解决方案
  • 智能硬件中的嵌入式开发与系统集成
  • Qwen3-ForcedAligner-0.6B实战教程:Streamlit界面定制与模型缓存优化
  • G-Helper终极指南:3步解决华硕笔记本性能瓶颈的免费开源工具
  • 哪家矿泉水品牌专业?2026年4月推荐评测口碑对比五款产品顶尖日常饮用健康需求 - 品牌推荐
  • 食品包装设计实力哪家强?找专业靠谱食品包装设计公司,先了解哲仕品牌策略设计公司! - 设计调研者
  • 猫狗分类实战:从数据预处理到模型优化的完整指南
  • Qwen3.5-9B-GGUF智能车联应用:车载语音助手与决策系统原型
  • 2026年4月全球留香沐浴露品牌推荐:十大口碑产品评测对比顶尖熬夜加班后体味烦恼 - 品牌推荐
  • 2025-2026年国内矿泉水品牌评测:五家口碑产品推荐评价领先办公室健康饮水矿物质吸收注意事项 - 品牌推荐
  • 容器化技术演进Docker核心原理剖析
  • 视频孪生赋能智慧图书馆:黎阳之光全域实景数智方案
  • 梯度下降算法原理与Python实现详解