golang:多维切片

入门

声明一个多维数组的语法格式如下:

var sliceName [][]...[]sliceType

其中,sliceName 为切片的名字,sliceType为切片的类型,每个[ ]代表着一个维度,切片有几个维度就需要几个[ ]。

下面以二维切片为例,声明一个二维切片并赋值,代码如下所示。

//声明一个二维切片
var slice [][]int
//为二维切片赋值
slice = [][]int{{10}, {100, 200}}

上面的代码也可以简写为下面的样子。

// 声明一个二维整型切片并赋值
slice := [][]int{{10}, {100, 200}}

上面的代码中展示了一个包含两个元素的外层切片,同时每个元素包又含一个内层的整型切片,切片 slice 的值如下图所示。
在这里插入图片描述
通过上图可以看到外层的切片包括两个元素,每个元素都是一个切片,第一个元素中的切片使用单个整数 10 来初始化,第二个元素中的切片包括两个整数,即 100 和 200。

// 声明一个二维整型切片并赋值
slice := [][]int{{10}, {100, 200}}
// 为第一个切片追加值为 20 的元素
slice[0] = append(slice[0], 20)

使用 append() 函数处理追加的方式很简明,先增长切片,再将新的整型切片赋值给外层切片的第一个元素,当上面代码中的操作完成后,再将切片复制到外层切片的索引为 0 的元素,如下图所示
在这里插入图片描述
即便是这么简单的多维切片,操作时也会涉及众多的布局和值,在函数间这样传递数据结构会很复杂,不过切片本身结构很简单,可以用很小的成本在函数间传递。

比较切片是否相等

有两种方法,使用反射或者循环比较,例子如下:

package main

import (
	"fmt"
	"reflect"
)

func ReflectSlice(a, b []string) bool {
	return reflect.DeepEqual(a, b)
}


func CompareSlice(a, b []string) bool {
	if len(a) != len(b) {
		return false
	}

	if (a == nil) != (b == nil) {
		return false
	}

	for key, value := range a {
		if value != b[key] {
			return false
		}
	}

	return true
}



func main() {
	var slice1 [][]string
	var slice2 [][]string
	//为二维切片赋值
	slice1 = [][]string{{"10"}, {"100", "200"}}
	slice2 = [][]string{{"10", "10"}, {"100", "200"}}
	fmt.Println(ReflectSlice(slice1[0], slice2[0]))
	fmt.Println(ReflectSlice(slice1[1], slice2[1]))


	fmt.Println(CompareSlice(slice1[0], slice2[0]))
	fmt.Println(CompareSlice(slice1[1], slice2[1]))
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值