广告
返回顶部
首页 > 资讯 > 精选 >Go语言容器的数组和切片如何使用
  • 952
分享到

Go语言容器的数组和切片如何使用

2023-07-04 13:07:38 952人浏览 泡泡鱼
摘要

这篇文章主要介绍“Go语言容器的数组和切片如何使用”,在日常操作中,相信很多人在Go语言容器的数组和切片如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言容器的数组和切片如何使用”的疑惑有所帮助!

这篇文章主要介绍“Go语言容器数组和切片如何使用”,在日常操作中,相信很多人在Go语言容器的数组和切片如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言容器的数组和切片如何使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

序列容器

序列容器存储特定类型的数据元素。目前有 5 种序列容器的实现:

  • array

  • vector

  • deque

  • list

  • forward_list

这些序列容易可以用顺序的方式保存数据,利用这些序列容易能够编写有效的代码,重复使用标准库的模块化。

数组

Go 语言中的数组类型有点类似 c++ 中的数据,Go 的数组初始化定义后,在编译时就不会再变更。

定义数组的方式如下:

var a [10]intb := [5]string {"H", "e", "l", "l", "o"}

[n]T 类型就表示含有 n 个类型为 T 的数组,本例中就是 a 变量表示含有 10 个 int 类型的整型数组;b 变量表示含有 5 个 string 类型的字符串数组。 数组的长度作为其类型的一部分,因此数组的长度是无法调整的。

package mainimport "fmt"func main() {var a [10]inta[0] = 2022a[1] = 2023fmt.Println(a[0], a[1])fmt.Println(a)b := [5]string {"H", "e", "l", "l", "o"}fmt.Println(b)}

运行结果如下:

Go语言容器的数组和切片如何使用

Vector

你可能会好奇,Go 语言又没有 C++ 中的 Vector 类型,为什么会举出这个例子。

其实 Go 最初有一个 Vector 类型的实现,但在 2011 年 10 月 11 日,在 Go 语言的开发阶段被删除了。保留了现在的切片,而切片就变成了实际上更好的 Vector 实现。

一个数组有固定的大小,但切片是一个动态、灵活的数组元素的视图,在实际中,切片比数组更为常见。

[]T 表示是一个具有类型 T 的元素切片,[]byte 是 byte slice,指元素为 byte 的 slice;[]string 是 string slice,指元素为 string 的 slice。

切片通过指定两个切点 a[low : high],可以定义如下的 sliceExample 切片:

sliceExample := []string{"Say", "Hello", "to", "you"}

切片对比数组的最大优点就是:可以随着增加和删除来增加或减少容器的大小。我们来看一个例子:

package mainimport "fmt"// remove i indexed item in a slicefunc remove(s []string, i int) []string {copy(s[i:], s[i+1:])return s[:len(s)-1]}func main() {primes := [6]int{2, 3, 5, 7, 11, 13}var s []int = primes[1:4]fmt.Println(s)sliceExample := []string{"Say", "Hello", "to", "you"}sliceExample = append(sliceExample, ",My Gopher Friends~")fmt.Println("Append Slice: ", sliceExample)sliceExample = remove(sliceExample, 0)fmt.Println("After Removed Item: ", sliceExample)}

运行结果如下图:

Go语言容器的数组和切片如何使用

我们分享了 Go 语言提供的容器中的数组和切片,不管是数据还是切片,它们内部的数据类型必须是一致的(要么都是整型、要么都是字符串类型)。但数据的大小是固定,而切片可以根据元素的添加和减少动态调整容器大小。

Deque

Deque,即双端队列,是一个可以扩展的容器。扩展可以发生在容器的前面或后面。当队列的顶部或尾部需要经常被引用时,经常使用双端队列。

Go语言容器的数组和切片如何使用

下面的代码块显示了 Go 双端队列 deque 的使用:

package mainimport ("fmt""GitHub.com/gammazero/deque")func main() {var q deque.Deque[string]q.PushBack("I")q.PushBack("love")q.PushBack("learning")q.PushBack("Go")fmt.Println("队列长度为: ", q.Len())  // Prints: 4fmt.Println("队首为元素:", q.Front()) // Prints: Ifmt.Println("队尾为元素: ", q.Back()) // Prints: Goq.PopFront() // remove "I"q.PopBack()  // remove "Go"q.PushFront("Hello")q.PushBack("World")// Consume deque and print elements.for q.Len() != 0 {fmt.Println(q.PopFront())}}

运行结果如图:

Go语言容器的数组和切片如何使用

List

List 在 Go 语言中有一个双链表的实现,它位于内置标准库 container/list 包中

我们可以直接使用这个链表的实现:

package mainimport ("container/list""fmt")func main() {// Create a new list and put some numbers in it.l1 := list.New()e4 := l1.PushBack(4)e1 := l1.PushFront(1)l1.InsertBefore(3, e4)l1.InsertAfter(2, e1) // now l1 is [1 2 3 4]// Iterate through list and print its contents.for e := l1.Front(); e != nil; e = e.Next() {fmt.Println(e.Value)}l1.MoveToBack(e1) // now l1 is [4 2 3 1]listLength := l1.Len() // length is 4fmt.Printf("l1 type: %T\n", l1)fmt.Println("l1 length : :", listLength)for e := l1.Front(); e != nil; e = e.Next() {fmt.Println(e.Value)}}

运行结果为:

1
2
3
4
l1 type: *list.List
l1 length : : 4
2
3
4
1

单链表

最后介绍一下单链表,如果我们想实现的数据结构并没有标准的容器集成,此时我们就可以通过自己根据要求来写一个自己想要的容器类型,这里以头插法的单链表举例:

package mainimport "fmt"type SinglyLinkedList struct {head *LinkedListnode}type LinkedListNode struct {data stringnext *LinkedListNode}func (ll *SinglyLinkedList) Append(node *LinkedListNode) {if ll.head == nil {ll.head = nodereturn}currentNode := ll.headfor currentNode.next != nil {currentNode = currentNode.next}currentNode.next = node}func main() {ll := &SinglyLinkedList{}ll.Append(&LinkedListNode{data: "Hello"})ll.Append(&LinkedListNode{data: "Gopher"})for e := ll.head; e != nil; e = e.next {fmt.Println(e.data)}}

运行结果如图:

Go语言容器的数组和切片如何使用

到此,关于“Go语言容器的数组和切片如何使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Go语言容器的数组和切片如何使用

本文链接: https://www.lsjlt.com/news/345149.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go语言容器的数组和切片如何使用
    这篇文章主要介绍“Go语言容器的数组和切片如何使用”,在日常操作中,相信很多人在Go语言容器的数组和切片如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言容器的数组和切片如何使用”的疑惑有所帮助!...
    99+
    2023-07-04
  • 浅析Go语言容器之数组和切片的使用
    目录序列容器数组VectorDequeList单链表总结在 Java 的核心库中,集合框架可谓鼎鼎大名:Array 、List、Set、Queue、HashMap 等等,随便拎一个出...
    99+
    2022-11-11
  • Go语言中数组,切片和映射怎么使用
    这篇文章主要讲解了“Go语言中数组,切片和映射怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go语言中数组,切片和映射怎么使用”吧!Arrays (数组), Slices (切片) ...
    99+
    2023-07-02
  • 详解Go语言中数组,切片和映射的使用
    目录1.Arrays (数组)2.切片2.1 make创建切片3.映射MapArrays (数组), Slices (切片) 和 Maps (映射) 是常见的一类数据结构 1.Arr...
    99+
    2022-11-13
  • Go语言数组和切片的区别详解
    目录数组声明以及初始化函数参数切片声明以及初始化函数参数总结参考文章:在 Go 语言中,数组和切片看起来很像,但其实它们又有很多的不同之处,这篇文章就来说说它们到底有哪些不同。 另外...
    99+
    2023-05-14
    Go 数组和切片
  • Go语言中的数组和切片是什么
    本篇内容介绍了“Go语言中的数组和切片是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录 数组 切片(Slice)append 函数1...
    99+
    2023-06-20
  • Go语言中的数组、切片和映射解析
    目录 数组数组的声明数组循环 切片切片声明切片元素循环 映射Map的声明及初始化Map的遍历 数组 数组存放的是固定长度、相同类型的数据,而且这些存放的元素是连续的。 数组的声...
    99+
    2023-09-08
    学习 go 青少年编程 开发语言
  • Go语言数组和切片的区别有哪些
    这篇“Go语言数组和切片的区别有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go语言数组和切片的区别有哪些”文章吧。数...
    99+
    2023-07-05
  • go语言中切片和数组指的是什么
    本文小编为大家详细介绍“go语言中切片和数组指的是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“go语言中切片和数组指的是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在go语言中,数组是一个由固定长度...
    99+
    2023-07-04
  • Go 语言中的数组和切片有什么区别?
    在 Go 语言中,数组和切片都是常见的数据结构。尽管它们都可以用于存储相同类型的数据,但它们在语义上具有不同的行为,这使得它们在实际使用中有着不同的用途。 数组 数组是一种固定长度、存储相同类型元素的集合。在 Go 语言中,数组的长度...
    99+
    2023-10-07
    数组 git 日志
  • 简单聊一聊Go语言中的数组和切片
    目录1. 数组2. 切片(Slice)append 函数总结1. 数组 数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。因为数组的长度是固定的,因此...
    99+
    2022-11-12
  • 深入剖析Go语言中数组和切片的区别
    目录1. 数组的定义和特性1.1 数组的定义1.2 数组的特性2. 切片的定义和特性2.1 切片的定义2.2 切片的特性3. 数组和切片的内存布局3.1 数组的内存布局3.2 切片的...
    99+
    2023-05-19
    Go语言数组 切片区别 Go语言数组 切片 Go语言数组 Go语言 切片
  • 一文详解Go语言切片是如何扩容的
    目录声明和初始化扩容时机源码分析go1.17go1.18内存对齐总结在 Go 语言中,有一个很常用的数据结构,那就是切片(Slice)。 切片是一个拥有相同类型元素的可变长度的序列,...
    99+
    2023-05-15
    Go语言切片扩容 Go语言切片 Go 切片扩容 Go 切片
  • go语言中的切片如何定义及使用
    这篇文章主要介绍“go语言中的切片如何定义及使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“go语言中的切片如何定义及使用”文章能帮助大家解决问题。golang切片(slice)(1)切片的定义切...
    99+
    2023-07-02
  • Go语言中如何操作数组、路径和容器?
    Go语言是一门高效、简洁、安全的编程语言,它支持各种数据结构和算法。在Go语言中,数组、路径和容器是常见的数据结构,本文将介绍如何使用Go语言操作这些数据结构。 一、数组 数组是由相同类型的元素组成的有限序列,它可以通过下标访问元素。在Go...
    99+
    2023-06-28
    数组 path 容器
  • Go语言的数组如何使用
    这篇文章主要讲解了“Go语言的数组如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go语言的数组如何使用”吧!什么是数组什么是数组?数组是有固定长度的相同数据类型元素的集合, 如下图所...
    99+
    2023-07-05
  • Go语言的并发编程,如何更好地利用容器和数组?
    在现代编程中,多线程和并发编程已经成为了非常重要的一部分。随着硬件技术的不断提高,现代计算机系统越来越拥有强大的处理能力,使得多线程和并发编程成为了一种非常有效的编程方式。在Go语言中,我们可以通过使用容器和数组来更好地进行并发编程,本文...
    99+
    2023-11-03
    并发 容器 数组
  • 如何使用Go语言加载容器?
    Go语言是一种流行的编程语言,它具有高效、可靠和易于使用的特点。在容器化的世界中,Go语言也是非常流行的一种语言。在本文中,我们将探讨如何使用Go语言加载容器。 Docker是目前最流行的容器化工具之一。在Go语言中,有一个名为"dock...
    99+
    2023-09-18
    关键字 load 容器
  • Go语言中,如何优雅地处理数组、路径和容器?
    Go语言是一门轻量级的编程语言,它的设计目标是高效、可靠和简洁。在实际的开发中,我们通常需要处理数组、路径和容器等数据结构,那么在Go语言中,如何优雅地处理这些数据结构呢?本文将为您详细介绍。 一、数组的定义和使用 在Go语言中,数组是一种...
    99+
    2023-06-28
    数组 path 容器
  • 如何在Go语言中使用数组?
    Go语言是一种高效、简洁的编程语言,它具有很多强大的特性,其中之一就是数组。数组是一种非常基础的数据结构,它可以让我们存储多个相同类型的值,并且可以通过下标来访问它们。在本文中,我们将详细介绍如何在Go语言中使用数组。 一、声明数组 在Go...
    99+
    2023-07-19
    关键字 框架 数组
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作