Go语言中文网 为您找到相关结果 49

golang截取字符串

//截取字符串 start 起点下标 length 需要截取的长度 func Substr(str string, start int, length int) string { rs := []rune(str) rl := len(rs) end := 0 if start < 0 { start = rl - 1 + start } end = start + length if start > end { start, end = end, start } if start < 0 { start = 0 } if start > rl { start = rl } if end < 0 { end = 0 } if end > rl { end = rl } return stri...阅读全文

博文 2015-06-18 17:04:30 u012210379

golang substring

在java下习惯了String.subString(start,end) 然后再golang继续敲substring木有了,看了下代码,也是原生支持的 但是百度发现有些人竟然把字符串转成字符数组再根据下标取,简直误人子弟 go的string 支持直接根据 index 截取字符串的 例如 str := "hello world" fmt.Print(str[0:5]) 运行的时候将会输出 hello 很简单...阅读全文

博文 2015-02-28 03:00:01 modprobe

go语言实现两个数组合并(merge)

//x数组,i:x数组的起始下标 y数组,j:y数组的起始下标 //说明:x和y数组都是有序的数组 func merge(x []int, i int, y []int, j int) []int { xlen := len(x)//x数组的长度 ylen := len(y)//y数组的长度 z := make([]int, xlen+ylen)//创建一个大小为xlen+ylen的数组切片 k := 0//数组切片z的下标 for i if x[i] < y[j] {//把小数放在数组切片z里 z[k] = x[i] i++ } else { z[k] = y[j] j++ } k++ } for i != xlen {//把x到xlen-1的数据也存入z中 z[k] = x[i] k++...阅读全文

博文 2014-10-04 19:26:25 zongjh

golang silce/append的使用

初始化 切片可以通过数组来初始化,也可以通过内置函数make()初始化 .初始化时len=cap,在追加元素时如果容量cap不足时将按len的2倍扩容 查看示例代码,在线运行示例代码 s :=[] int {1,2,3 } 直接初始化切片,[]表示是切片类型,{1,2,3}初始化值依次是1,2,3.其cap=len=3 s := arr[:] 初始化切片s,是数组arr的引用 s := arr[startIndex:endIndex] 将arr中从下标startIndex到endIndex-1 下的元素创建为一个新的切片 s := arr[startIndex:] 缺省endIndex时将表示一直到arr的最后一个元素 s := arr[:endIndex] 缺省startIndex时将表示...阅读全文

博文 2015-08-13 11:00:12 webyh

Go语言截取字符串

go没有像php或js那样的Substr函数,而且如果直接用string加下标的方式输出的话,输出的是UTF8编码。 Go语言中用下标访问string类型(中文字符),输出的是什么编码? 下面提供简单的字符串截取方法: rs := []rune(str) fmt.Println(string(rs[起始位置:截取长度])) $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('

    ').addClass('pre-numbering').hide(); $(this).addClass(...阅读全文

博文 2016-04-30 00:00:02 Jesounao

golang 数组 slice 乱序

数组乱序 方法1.sliceOutOfOrder 选定随机数r 将下标r和下边i交换,i– ,就是和当前最后一位交换 方法2.rand.Perm(数组长度) 将原数组下标按照随机出来的数据赋值给另一数组 package main import "fmt" import "math/rand" import "time" var ( rr = rand.New(rand.NewSource(time.Now().UnixNano())) a1 = [2]int{} a2 = [10]int{} ) func main() { a := []int{0, 1} for i := 0; i < 10000; i++ { randslice() //fmt.Println(rr.Intn(10)) ...阅读全文

博文 2015-10-20 18:00:37 csapr1987

go语言实现两个数组合并(merge)(二)

package main import ( "fmt" ) func Merge() { a := []int{3,6,9, 4,5,45} z := merge2(a, 0, 2, 5, 6) fmt.Printf("%#v\n", z) } //x数组,下标p,q,r 元素个数m。x[p]~x[q]及x[q+1]~x[r]已按递增排序 func merge2(x []int, p, q, r, m int) []int { z := make([]int, m) k := 0 a := q b := q + 1 for p if x[p] z[k] = x[p] p++ } else { z[k] = x[b] b++ } k++ } for p != a+1 { z[k] = x[p]...阅读全文

博文 2014-10-04 19:26:25 zongjh

go语言中int和byte转换

主机字节序 主机字节序模式有两种,大端数据模式和小端数据模式,在网络编程中应注意这两者的区别,以保证数据处理的正确性;例如网络的数据是以大端数据模式进行交互,而我们的主机大多数以小端模式处理,如果不转换,数据会混乱 参考;一般来说,两个主机在网络通信需要经过如下转换过程:主机字节序 —> 网络字节序 -> 主机字节序 大端小端区别 大端模式:Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端 低地址 --------------------> 高地址 高位字节 地位字节 小端模式:Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端 低地址 --------------------> 高地址 低位字节 高位字节 什么是高位字...阅读全文

博文 2018-11-11 12:34:39 wuzhc

Golang数组Array和切片slice使用

数组 数组在go语言中为值类型 数组之间可以用= =或!=比较,但是数组长度也是类型的一部分,因此不同长度的数组为不同的类型,如下,这是两个不同类型,因为数组长度不一样,不能用==或!=比较= = 下面ap和at数组是不同类型 ap:=[5]int{3:2}//下标3的值赋值为2 at:=[6]int{} 数组遍历 //数组遍历,i是数组当前下标,p是当前下标对应的值,i可以用_下划线代替,表示忽略 as := [3]int{1, 2, 3} for i, p := range as { f.Println(i, "---", p) pa[i] = &as[i] } //还可以常用的遍历循环 le:=len(as) for i:=0;i阅读全文

博文 2017-09-30 09:35:17 Link_Biao

rune

在Go当中 string底层是用byte数组存的,并且是不可以改变的。 例如 s:="Go编程" fmt.Println(len(s)) 输出结果应该是8因为中文字符是用3个字节存的。 len(string(rune('编')))的结果是3 如果想要获得我们想要的情况的话,需要先转换为rune切片再使用内置的len函数 fmt.Println(len([]rune(s))) 结果就是4了。 所以用string存储unicode的话,如果有中文,按下标是访问不到的,因为你只能得到一个byte。 要想访问中文的话,还是要用rune切片,这样就能按下表访问...阅读全文

堆排序算法及go语言实现

堆分最大堆、最小堆。 以最大堆为例。 最大堆是一个完全二叉树。 并且要求每个结点的值必须大于他的两个子节点。 所以他的根结点一定是最大值。 但是左右结点大小不一定。 用数组表示的二叉树,可以这样表达: i的子节点下标为 2*i + 1 和 2 * i + 2. i的父节点下标为 (i-1)/2。 对于数组长度length,大于length/2的下标一定没有子节点. 排序思想是构建最大堆,之后根节点就是最大的一个了,把根结点拿出来,再把剩下的堆整理成最大堆,再把根拿出来。循环直到最后一个元素。 func HeapSort(values []int) { buildHeap(values) for i := len(values); i > 1; i-- { values[0], values[...阅读全文

博文 2016-04-15 16:00:02 zhaoguoguang

二分查找法(Golang版本)

一组数据要进行二分查找,那么这个要查找的元素是有序,并且是连续存放(数组)。这样才可以进行二分查找。 下面首先来创建一个文件和数组 package main import ( "fmt" "math" ) type DataStruct struct { Data []int } func main() { a1 := DataStruct{[]int{1, 2, 5, 7, 15, 25, 30, 36, 39, 51, 67, 78, 80, 82, 85, 91, 92, 97}} fmt.Println(a1) } 数组a1是一个从小到大的有序数组,总共有18个元素 假设说我要查找30这个值,如果按照循环的查找方法,找到30这个值要执行7次。那么如果是按照二分查找呢?好吧,二分查找的...阅读全文

博文 2017-05-08 03:00:28 Zorn

window.history.go()方法

history是你浏览过的网页的url(简单的说就是网址)的集合,也就是你的浏览器里的那个历史记录。它在js里是一个内置对象,就跟document一样,它有自己的方法,go就是其中一个。 这个方法的参数是一个数字,它指定要定位的url相对当前页面url位置的下标。当前的url下标为0,所以window.history.go(-1)就是要定位到相对当前页面下标为-1的页面,也就是之前刚刚访问的页面。 再举个例子: 你在地址栏访问百度页面(http://www.baidu.com),这时history里就把这个地址加到了它的集合里,并且将下标定为0. 通过搜索,你访问了新浪的页面(http://www.sina.cn),浏览器又将这个网址放在了history里,并将这个网址的下标定为0,而之前访...阅读全文

博文 2016-09-12 09:00:04 u012028371

Golang 语言中的 Slice

概念 Slice切片是对底层数组Array的封装,在内存中的存储本质就是数组,体现为连续的内存块,Go语言中的数组定义之后,长度就已经固定了,在使用过程中并不能改变其长度,而Slice就可以看做一个长度可变的数组进行使用,最为关键的,是数组在使用的过程中都是值传递,将一个数组赋值给一个新变量或作为方法参数传递时,是将源数组在内存中完全复制了一份,而不是引用源数组在内存中的地址,为了满足内存空间的复用和数组元素的值的一致性的应用需求,Slice出现了,每个Slice都是都源数组在内存中的地址的一个引用,源数组可以衍生出多个Slice,Slice也可以继续衍生Slice,而内存中,始终只有源数组,当然,也有例外,后边再说。 用法 1.Slice的定义 Slice可以通过两种方式定义,一种是从源数...阅读全文

Go学习笔记之复合数据

个人理解的复合数据是由其他数据格式复合而成。 1、array 数组的类型格式为单个数据单元类型+长度构成,如 [2]int,其中 [2] 代表数组的长度,而 int 代表每个单元都是整形。 数组的元素操作也是通过操作下标,即 arr[1] ,取出数组 arr 中的第2个元素,数组下标从0开始算起。 数组的长度可以通过 len(arr) 获取数组 arr 的长度。 1-1 声明和初始化 数组声明格式为 var 数组名 [数组长度]元素类型 例如: var arr [2]int arr[0] = 1 // 声明以后,就可以使用index进行赋值 声明数组后,未进行初始化,则每个数据单元的初值是单元数据类型的默认值,例如 int 就是 0 ,string 是空 "" 声明的同时也可以初始化 var...阅读全文

博文 2015-06-17 20:08:20 hnxxwyq

<13> go collection-func

集合的操作: import ( "fmt" "strings" ) // 返回数组下标,找不到返回-1 func Index(vs []string, t string) int { for i, v := range vs { if v == t { return i } } return -1 } // 是否包含t字符串 func Include(vs []string, t string) bool { return Index(vs, t) >= 0 } // 任何一个字串符合f即返回true func Any(vs []string, f func(string) bool) bool { for _, v := range vs { if f(v) { return true }...阅读全文

博文 2015-12-26 15:00:01 a11101171

老虞学GoLang笔记-数组和切片

数组 Arrays 数组是内置(build-in)类型,是一组同类型数据的集合,它是值类型,通过从0开始的下标索引访问元素值。在初始化后长度是固定的,无法修改其长度。当作为方法的入参传入时将复制一份数组而不是引用同一指针。数组的长度也是其类型的一部分,通过内置函数len(array)获取其长度。 初始化 数组的初始化有多种形式,查看示例代码 , 在线运行示例代码 [5] int {1,2,3,4,5} 长度为5的数组,其元素值依次为:1,2,3,4,5 [5] int {1,2} 长度为5的数组,其元素值依次为:1,2,0,0,0 。在初始化时没有指定初值的元素将会赋值为其元素类型int的默认值0,string的默认值是"" [...] int {1,2,3,4,5} 长度为5的数组,其长度...阅读全文

博文 2015-07-21 15:00:03 Gopher老虞

golang模仿c代码写的100的阶乘代码

``` package main import ( "fmt" "math" ) //获取阶乘的位数 func Get(number int) int { sum := 1.0 for i := 1; i < number+1; i++ { sum += math.Log10(float64(i)) } return int(sum) } //初始化结果数组 func InitArray(length int) []int { array := make([]int, length) array[0] = 1 return array } //开始计算阶乘的值 func Getvalue(number int) ...阅读全文

golang版KMP算法 实现判断旋转词

参照java版的写的,作者学习golang,进过一番折腾终于对kmp算法了解了,有不对的地方改正 1 package main 2 3 import ( 4 "fmt" 5 // "strings" 6 ) 7 8 //判断是否为旋转词 9 func isRotation(a, b string) bool { 10 if a == "" || b == "" { //如果俩个输入的字符串为空的话 直接return false 11 return false 12 } 13 b2 := b + b //把b相加起来拼成长 串 14 return getIndexOf(b2, a) != -1 //如果getIndexOf 为-1 则返回false 15 } 16 17 func getInd...阅读全文

博文 2016-08-30 16:00:00 hitxwk

《Go语言编程》中calc修改后可在Windows执行的源码

 《Go语言编程》中 第一个项目是calc,按照作者在书中的描述,在linux下运行没有问题。但经过实践,程序运行后不能打印出书中所描述的效果。 经过测试,发现windows命令行在执行calc add 2 3时,把calc也作为一个参数,这样使得真个程序中的参数数组下标与书中描述的有所不同。 现上传修改后的程序,供大家参考。 calc.go package main import "os" import "fmt" import "simplemath" import "strconv" var Usage = func() { fmt.Println("USAGE: calc command [arguments] ...") fmt.Println("\nThe commands a...阅读全文

博文 2016-02-24 11:00:01 wilsonzane

HDU 2722 Here We Go(relians) Again

Here We Go(relians) Again Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 162 Accepted Submission(s): 99 Problem Description The Gorelians are a warlike race that travel the universe conquering new worlds as a form of recreation. Given their violent, fun-loving nature, keeping their leaders aliv...阅读全文

博文 2016-02-03 23:00:04 sgeteternal

Go语言核心——slice切片

Slice是长度可变的元素序列(数组不可变),每个元素都有相同的类型。slice类型写作[]T,其中T代表slice中的元素类型;slice和数组写法很像,只是没有指定长度。 数组和slice之间的联系非常紧密。slice是非常轻量的数据结构,它是引用类型,指向底层的一个数组,该数组被称之为slice的底层数组,slice可以访问底层数组的某个子序列,也可以访问整个数组。一个slice由三个部分组成:指针、长度、容量,指针指向了slice中第一个元素对应的底层数组元素的地址,因为slice未必是从数组第一个元素开始,因此slice中的第一个元素未必是数组中的第一个元素。长度对应slice中的元素数目,长度是不能超过容量的;容量一般是从slice中第一个元素对应底层数组中的开始位置,到底层数组...阅读全文

博文 2016-04-28 08:00:01 zealifree005

(一)GoLang小记 —— 数组与数组切片

一、创建方式 主要分为: 1、完整创建; 2、切片创建; //创建数组(声明长度) var array1 = [5]int{1, 2, 3} fmt.Printf("array1--- type:%T \n", array1) rangeIntPrint(array1[:]) //创建数组(不声明长度) var array2 = [...]int{6, 7, 8} fmt.Printf("array2--- type:%T \n", array2) rangeIntPrint(array2[:]) //创建数组切片 var array3 = []int{9, 10, 11, 12} fmt.Printf("array3--- type:%T \n", array3) rangeIntPrin...阅读全文

博文 2016-10-19 11:00:17 水果糖

golang 多个值对比

package main import ( "fmt" "reflect" ) func main() { fmt.Println(contrast(1, 2, 3)) } func contrast(val ...interface{}) bool { var ( flag bool = true val_len int = len(val) next_key int ) //循环传递过来的数据 for key := 0; key < val_len; key++ { next_key = key + 1 //防止数组越界 如果获取下个key 超过数组的长度说明取完了 如果等于也说明这个下标对比完了 if next_key > val_len || next_key == val_len ...阅读全文

博文 2016-11-28 12:00:06 liangguangchuan

leetcode刷题记录Array篇(1&4~Two Sum&Median of Two Sorted Arrays)

今天写了一道比较简单的和一道难的 #Two Sum 题目:Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solution, and you may not use the same element twice. 简单翻译,就是在一个数组中寻找相加和target值相等的两个数的下标,只要返回最先匹配的,并且下标相等的不算。 golang代码: package main import ( "fmt" ) func main()...阅读全文

博文 2017-04-19 08:56:48 L千年老妖

Golang range 的一些坑

先举个栗子: package main import ( "fmt" ) type Foo struct { Bar string } func main() { list := []Foo{Foo{"bar1"}, Foo{"bar2"}, Foo{"bar3"}} for i, v := range list { v.Bar = "change" + string(i) } fmt.Println(list) } 我们期望的结果是 [{change1} {change2} {change3}] 但是实际输出的结果是 [{test1} {test2} {test3}] 为什么没有改变? 其实 for range 中的 v 是一个数组元素值的拷贝, 而不是数组元素本身。所以,修改数组元素需要...阅读全文

博文 2018-10-18 20:34:39 youmisun

go语言学习笔记

//变量声明 i := 10; //直接声明并赋值 j := 100; i,j=j,i //变换i,j的值 fmt.Printf("i=%d j=%d\n",i,j)//格式化输了 fmt.Println("i=",i);//不能使用%d等 var a int var b [10]int var c []int //数组切片,相当于vector可变数组 var s string var p *int //指针 var m map[string]int //key为string类型,value为int类型 var fun func(a int) int //函数 var st struct ( //结构体 f int str string ) //或者也可以这样一起声明 var ( v1 in...阅读全文

博文 2016-01-21 10:00:02 u011466175

golang nocopy

在现实的项目开发过程中,都有 Nocpoy 对象的需求,那么如何在golang中实现这个特性呢?查看 src/sync中的包,很多都有 noCopy 结构体,其定义如下: // noCopy may be embedded into structs which must not be copied // after the first use.//// See https://golang.org/issues/8005#issuecomment-190753527 // for details. type noCopy struct{} // Lock is a no-op used by -copylocks checker from `go vet`. func (*noCopy) L...阅读全文

博文 2018-07-09 23:34:42 sanerersan

Golang数组和切片

数组 声明数组 数组同样使用倒置的方式来声明,并且声明数组的时候需要指定数组长度。所以声明数组需要使用[数组长度]类型的方式来声明,如果需要在声明的同时初始化,还可以添加{}初始化列表。 //声明数组 var array1 [2]int array1[0] = 1 array1[1] = 2 fmt.Println(array1) //声明的同时初始化 array2 := [3]int{1, 2, 3} fmt.Println(array2) 数组一旦声明,长度就是固定不可变的了。 访问数组 这个比较简单,和一般编程语言一样。下面是一个小例子。 //访问数组 numbers := [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} for i := 0; i < l...阅读全文

博文 2017-07-07 15:07:01 乐百川

golang substring

在java下习惯了String.subString(start,end) 然后再golang继续敲substring木有了,看了下代码,也是原生支持的 但是百度发现有些人竟然把字符串转成字符数组再根据下标取,简直误人子弟 go的string 支持直接根据 index 截取字符串的 例如 str := "hello world" fmt.Print(str[0:5]) 运行的时候将会输出 hello 很简单...阅读全文

博文 2016-11-08 03:00:05 modprobe

golang插入排序算法

插入排序算法原理:顺序从序列中取一个数与左侧的元素们做比较,如果左侧的元素比取的数大,就向右移,直到把取的数插入到不小于左侧元素的位置处。类似于扑克牌的点数排序。 package main import "fmt" func main() { numbers := []int{6, 2, 7, 3, 8, 5} InsertSort(numbers) fmt.Println(numbers) } func InsertSort(values []int) { length := len(values) if length <= 1 { return } for i := 1; i < length; i++ { tmp := values[i] // 从第二个数开始,从左向右依次取数 key...阅读全文

博文 2018-07-02 21:35:45 ustb80

golang选择排序算法

选择排序的原理: 每次从余下的数中找最小的,并排到余下的数的最开头。 package main import "fmt" func main() { numbers := []int{6, 2, 7, 5, 8, 9} SelectSort(numbers) fmt.Println(numbers) } func SelectSort(values []int) { length := len(values) if length <= 1 { return } for i := 0; i < length; i++ { min := i // 初始的最小值位置从0开始,依次向右 // 从i右侧的所有元素中找出当前最小值所在的下标 for j := length - 1; j > i; j--...阅读全文

博文 2018-07-02 21:35:45 ustb80

Golang学习(12)——regex包

Golang学习 - regexp 包------------------------// 函数// 判断在 b(s、r)中能否找到 pattern 所匹配的字符串func Match(pattern string, b []byte) (matched bool, err error)func MatchString(pattern string, s string) (matched bool, err error)func MatchReader(pattern string, r io.RuneReader) (matched bool, err error)// 将 s 中的正则表达式元字符转义成普通字符。func QuoteMeta(s string) string-------...阅读全文

博文 2017-02-10 10:19:39 1160636144

go语言数组

1 go语言数组简介 数组是Go语言编程中最常用的数据结构之一。顾名思义,数组就是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数组的长度。 在Go语言中数组是一个值类型(value type)。是真真实实的数组,而不是一个指向数组内存起始位置的指针,也不能和同类型的指针进行转化,这一点严重不同于C语言。所有的值类型变量在赋值和作为参数传递时都将产生一次复制动作。如果将数组作为函数的参数类型,则在函数调用时该参数将发生数据复制。因此,在函数体中无法修改传入的数组的内容,因为函数内操作的只是所传入数组的一个副本。 2 数组定义 定义方式如下 var arr [n]type n表示数组长度,type表示数组存储类型。 在Go语言中,...阅读全文

博文 2016-09-07 02:01:07 wangzhanzheng

go语言数组

1 go语言数组简介 数组是Go语言编程中最常用的数据结构之一。顾名思义,数组就是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数组的长度。 在Go语言中数组是一个值类型(value type)。是真真实实的数组,而不是一个指向数组内存起始位置的指针,也不能和同类型的指针进行转化,这一点严重不同于C语言。所有的值类型变量在赋值和作为参数传递时都将产生一次复制动作。如果将数组作为函数的参数类型,则在函数调用时该参数将发生数据复制。因此,在函数体中无法修改传入的数组的内容,因为函数内操作的只是所传入数组的一个副本。 2 数组定义 定义方式如下 var arr [n]type n表示数组长度,type表示数组存储类型。 在Go语言中,...阅读全文

博文 2016-09-07 02:00:02 wangzhanzheng

使用go实现的排序算法

go实现的部分排序算法,待整理 // algorithm project main.go package main import ( "fmt" ) func main() { arr := []int{50, 45, 42, 30, 25, 20, 20, 5, 60, 3, 23, 50, 29, 235, 9} //arr := []int{50, 235, 60} fmt.Println(arr) fmt.Println("----------") //直接插入排序 //arr1 := insertSort(arr) //arr1 := selectSort(arr) //a, b := selectMinAndMax(arr, 0, 14) //arr1 := selectSort...阅读全文

博文 2017-09-25 11:34:46 light

TODO:字节的那点事Go篇

TODO:字节的那点事Go篇 (本文go version go1.7.3 darwin/amd64)在Golang中string底层是由byte数组组成的。fmt.Println(len(“dsd好”))输出的长度是6fmt.Println(len(string(rune(‘好’))))输出的长度是3fmt.Println(len([]rune(“好的2s”)))输出的长度是4所以用string存储unicode的话,如果有中文(中文是由3个字节组成),按下标是访问不到的,因为你只能得到一个byte。 要想访问中文的话,还是要用rune切片,这样就能按下标访问。UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称...阅读全文

博文 2017-02-10 15:50:56 OneTODO

Golang学习笔记之切片(slice)

切片slice:切片是对数组的抽象。切片在内存中占24个字节 runtime.h struct Slice{ // must not move anything byte* array; // actual data uintgo len; // number of elements uintgo cap; // allocated number of elements }; 切片包含长度、容量、以及一个指向首元素的指针 • 引⽤类型。但⾃⾝是结构体,值拷⻉传递。 • 属性 len 表⽰可⽤元素数量,读写操作不能超过该限制。 • 属性 cap 表⽰最⼤扩张容量,不能超出数组限制。 • 如果 slice == nil,那么 len、 cap 结果都等于 0。 • 作为变长数组的替代方案,可以关...阅读全文

博文 2018-12-05 18:34:43 学生黄哲

2018-08-16-string rune byte 的关系

在Go语言中string 底层是用byte数组存储的,并且是不可以改变的 例如 s:="Go编程" fmt.Println(len(s))输出结果应该是8因为中文字符是用3个字节存的。 len(string(rune('编')))的结果是3 如果想要获得我们想要的情况的话,需要先转换为rune切片再使用内置的len函数fmt.Println(len([]rune(s)))结果就是4了。 所以用string存储unicode的话,如果有中文,按下标是访问不到的,因为你只能得到一个byte。 要想访问中文的话,还是要用rune切片,这样就能按下表访问。 rune在golang 中是int32 的别名,被用来区分字符值和整数值。通过上述例子可以将rune理解为一个可以表示unicode 编码的值i...阅读全文

博文 2018-08-16 15:34:54 ihujian

插入排序

Java代码实现 public static void insertSort(int[] arr) { // 开始下标 int start = 1; // 数组长度 int len = arr.length; for (; start < len; start++) { // 移动法临时变量 int tmp = arr[start]; int j = start - 1; for (; j >= 0 && arr[j] > tmp; j--) { arr[j + 1] = arr[j]; } arr[j + 1] = tmp; } } GoLang代码实现 func insertSort(arr []int) { // 从下标为1的数组开始排序 start := 1 // 数组长度 len ...阅读全文

博文 2019-01-17 18:34:42 a丶逍遥子

【GoLang那点事】链表-删除排序链表中的重复元素,你能想到几种解法?

#### 问题 > 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字 #### 示例1 > 输入: 1->2->3->3->4->4->5 > 输出: 1->2->5 #### 示例二 > 输入: 1->1->1->2->3 > 输出: 2->3 #### 解法一 * 提取问题关键字,有序链表,删除重复,因为是有序的,所以重复的元素一定相邻的,不会出现(2->3-2)这种情况的,最简单的办法,遍历链表,利用数据结构map,key是链表节点的值,value是值在链表中出现的次数,最终次数大于1的就是重复的,等于1的就是不重复的,但是map元素是无序的,所以我们对剩余的元素排序,最后转化为链表。 * 麻烦吗? 我觉得很麻烦,也没人这么实现。看到上面给的算法我就...阅读全文

博文 2019-08-02 09:26:14 SunPengWei

数组与切片

# 数组 ### 定义:是同一种数据类型的**固定长度**的序列。var a [len]int #### 长度是数组类型的一部分,因此,var a[5] int和var a[10]int是不同的类型,数组可以通过下标进行访问,下标是从0开始,最后一个元素下标是:len-1,访问越界,如果下标在数组合法范围之外,则触发访问越界,会panic #### 数组是值类型,因此改变副本的值,不会改变本身的值 example:fibonacci非递归: ``` func fibonacci() { fib := [20]int64{0: 1, 1: 1} for i := range fib { if i == 0 || i == 1 { continue } fib[i] = fib[i-1] + f...阅读全文

博文 2018-10-12 16:12:36 ace_kylin

数组Array

Golang Array和以往认知的数组有很大不同。 1. 数组:是同一种数据类型的固定长度的序列。 2. 数组定义:var a [len]int,比如:var a [5]int,数组长度必须是常量,且是类型的组成部分。一旦定义,长度不能变。 3. 长度是数组类型的一部分,因此,var a[5] int和var a[10]int是不同的类型。 4. 数组可以通过下标进行访问,下标是从0开始,最后一个元素下标是:len-1 for i := 0; i < len(a); i++ { } for index, v := range a { } 5. 访问越界,如果下标在数组合法范围之外,则触发访问越界,会panic 6. 数组是值类型,赋值和传参会复制整个数组,而不是指针。因此改变副本的值,不会...阅读全文

博文 2019-02-20 01:34:43 weifansym

【GoLang那点事】深入Go的Map使用和实现原理

#### 开篇语 > Map是一种常用的kv数据结构,程序设计中经常使用,且作为一种最基础的数据结构,很多编程语言本身提供的api都会有实现,Go也不例外,今天我们将从一下三个方面为大家分析Go中的Map。 * 什么是Map? * Go中如何使用Map? * 以及Go的Map实现机制是什么样? > 希望通过这几个方面的讲解,让大家真正理解Go的Map使用和实现。 #### 什么是Map ##### key,value存储 > 最通俗的话说Map是一种通过key来获取value的一个数据结构,其底层存储方式为数组,在存储时key不能重复,当key重复时,value进行覆盖,我们通过key进行hash运算(可以简单理解为把key转化为一个整形数字)然后对数组的长度取余,得到key存储在数组的哪个...阅读全文

博文 2019-07-27 14:56:59 SunPengWei

【GoLang那点事】Go数组和切片你不知道的区别

#### 开篇语 > 组和切片是两种不同的数据结构,比较常见,在go语言中同时存在,今天我们就一起来看看他们在使用方式上,原理上的一些区别? #### 数组 * 在go语言中,数组是一种具有相同类型固定大小的一种数据结构。 > 我们先来看看数组使用数组类型声明时的方式是 []T ,前面的[]指定数组的大小,T指定数组的类型如下我们声明了一下数组,数组的大小是3,在没指定数组初始值时数组默认初始值是{0,0,0} ```go array1 := [3]int{} //我们可以通过如下方式给数组赋值 array1[0] = 1 array1[1] = 2 array1[2] = 3 //下面这种也是数组声明的一种方式,并且初始化数组的值为{1,2} array2 := [2]int {1,2} ...阅读全文

博文 2019-07-26 15:05:08 SunPengWei

希尔排序

Java代码实现 public static void shellSort(int[] arr) { int len = arr.length; //增量, 选择合适的增量有助于性能提升 int inc = 2; // 步长 int step = len / inc; for (; step > 0; step /= inc) { //从第r个元素,逐个对其所在组进行直接插入排序操作 for (int r = step; r < len; r ++) { // 左边要比较的值 int l = r - step; int insertValue = arr[r]; for (; l >= 0 && insertValue < arr[l]; l -= step) { arr[l + step]...阅读全文

博文 2019-01-17 19:34:43 a丶逍遥子

2019-08-12【LeekCode题库problem-1】

GitHub 地址:coffeeTu-code LeekCode 地址:题库 Language:Golang /* @题目(Two Sum) 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 @示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] @题目大意 在数组中找到 2 个数之和等于给定值的数字,结果返回 2 个数字在数组中的下标。 @解题思路 这道题最优的做法时间复杂度是 O(n)。 顺序扫描数组,对每一个元素,在...阅读全文

博文 2019-08-12 00:32:51 CoffeeRabbit