array

package module
v0.0.0-...-439c5b8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 4, 2020 License: MIT Imports: 2 Imported by: 0

README

Golang Array 泛型数组

基于 golang 实现的泛型数组,支持动态扩容等特性。

Build Status Build Status

项目结构

.
├── README.md
├── array.go  //实现
├── array_test.go  //测试用例
└── example_array_test.go  //使用例子

功能

  • GetCapacity获取数组容量
  • GetSize获取数组长度
  • IsEmpty判断数组是否为空
  • AddFirst向数组头插入元素
  • AddLast向数组尾插入元素
  • Add在索引位置插入元素
  • Get获取索引元素
  • Set修改索引位置元素
  • Contains查找数组中是否有元素
  • Find通过索引查找数组,索引范围[0,n-1](未找到,返回 -1)
  • Remove删除 index 位置的元素,并返回
  • RemoveFirst删除数组首个元素
  • RemoveLast删除末尾元素
  • RemoveElement从数组中删除指定元素
  • Clear清空数组
  • PrintIn打印格式化

Documentation

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Array

type Array struct {
	// contains filtered or unexported fields
}

func NewArray

func NewArray(capacity ...int) (array *Array)

数组初始化内存 (可以指定长度,默认为10个长度)

Example

测试实例化

package main

import (
	"github.com/JeffreyBool/array"
	"log"
)

func main() {
	array := array.NewArray(2)
	for i := 0; i < 10; i++ {
		if err := array.Add(i, i+1); err != nil {
			log.Fatal(err)
			break
		}
	}

	array.PrintIn()
	if err := array.Add(10, 11); err != nil {
		log.Fatal(err)
	}

	if err := array.Add(10, 12); err != nil {
		log.Fatal(err)
	}

	array.PrintIn()

}
Output:

Array: size = 10 , capacity = 16
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Array: size = 12 , capacity = 16
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 11]

func (*Array) Add

func (array *Array) Add(index int, value interface{}) (err error)

在 index 位置,插入元素e, 时间复杂度 O(m+n)

Example

动态添加元素

package main

import (
	"github.com/JeffreyBool/array"
	"log"
)

func main() {
	strs := []string{"A", "B", "C", "D", "E", "F"}
	array := array.NewArray()
	for i := 0; i < len(strs); i++ {
		if err := array.Add(i, strs[i]); err != nil {
			log.Fatal(err)
			break
		}
	}
	array.PrintIn()
}
Output:

Array: size = 6 , capacity = 10
[A, B, C, D, E, F]

func (*Array) AddFirst

func (array *Array) AddFirst(value interface{}) error

向数组头插入元素

Example

向数组头部添加元素

package main

import (
	"github.com/JeffreyBool/array"
)

func main() {
	array := array.NewArray()
	array.AddFirst("array add first")
	array.AddLast("array add last")
	array.Add(1, "array add value")
	array.PrintIn()
}
Output:

Array: size = 3 , capacity = 10
[array add first, array add value, array add last]

func (*Array) AddLast

func (array *Array) AddLast(value interface{}) error

向数组尾插入元素

Example

向数组末尾添加元素

package main

import (
	"github.com/JeffreyBool/array"
)

func main() {
	array := array.NewArray()
	array.Add(0, 19)
	array.Add(1, 19)
	array.Add(2, 19)
	array.Add(3, 19)
	array.Add(4, 19)
	array.AddLast(20)
	array.PrintIn()
}
Output:

Array: size = 6 , capacity = 10
[19, 19, 19, 19, 19, 20]

func (*Array) Clear

func (array *Array) Clear()

清空数组

Example

清空元素

package main

import (
	"github.com/JeffreyBool/array"
)

func main() {
	array := array.NewArray()
	strs := []string{"A", "B", "C", "D", "E", "F"}
	for index, str := range strs {
		array.Add(index, str)
	}

	array.PrintIn()
	array.Clear()
	array.PrintIn()
}
Output:

Array: size = 6 , capacity = 10
[A, B, C, D, E, F]
Array: size = 0 , capacity = 6
[]

func (*Array) Contains

func (array *Array) Contains(value interface{}) bool

查找数组中是否有元素

Example

判断数组是否存在某个值

package main

import (
	"fmt"
	"github.com/JeffreyBool/array"
)

func main() {
	array := array.NewArray()
	if array.Contains("我是张三") {
		fmt.Println("找到了")
	}
	array.AddFirst("我是张三")
	if array.Contains("我是张三") {
		fmt.Println("找到了")
	}
	array.PrintIn()
}
Output:

找到了
Array: size = 1 , capacity = 10
[我是张三]

func (*Array) Find

func (array *Array) Find(value interface{}) int

通过索引查找数组,索引范围[0,n-1](未找到,返回 -1)

Example

查询一个值的索引位置

package main

import (
	"fmt"
	"github.com/JeffreyBool/array"
)

func main() {
	array := array.NewArray(10)
	array.AddFirst("我是张三")
	array.AddFirst("我是张三")
	array.AddLast("我是李四")
	find := array.Find("我是李四")
	fmt.Println(find)
	array.PrintIn()
}
Output:

2
Array: size = 3 , capacity = 10
[我是张三, 我是张三, 我是李四]

func (*Array) Get

func (array *Array) Get(index int) (value interface{}, err error)

获取对应 index 位置的元素

Example

根据索引获取某个值

package main

import (
	"fmt"
	"github.com/JeffreyBool/array"
	"log"
)

func main() {
	array := array.NewArray(10)
	array.Add(0, 10)
	if value, err := array.Get(0); err != nil {
		log.Fatal(err)
	} else {
		fmt.Println(value)
	}
}
Output:

10

func (*Array) GetCapacity

func (array *Array) GetCapacity() int

获取数组容量

Example

获取数组容量

package main

import (
	"fmt"
	"github.com/JeffreyBool/array"
)

func main() {
	array := array.NewArray()
	array.AddLast("我是张高元")
	array.PrintIn()
	fmt.Printf("array cap:%d \n", array.GetCapacity())
}
Output:

Array: size = 1 , capacity = 10
[我是张高元]
array cap:10

func (*Array) GetSize

func (array *Array) GetSize() int

获取数组长度

Example

获取数组长度

package main

import (
	"fmt"
	"github.com/JeffreyBool/array"
)

func main() {
	array := array.NewArray()
	fmt.Printf("array len: %d \n", array.GetSize())
}
Output:

array len: 0

func (*Array) IsEmpty

func (array *Array) IsEmpty() bool

判断数组是否为空

Example

判断是否为空

package main

import (
	"fmt"
	"github.com/JeffreyBool/array"
)

func main() {
	array := array.NewArray()
	fmt.Printf("array empty: %t \n", array.IsEmpty())
}
Output:

array empty: true

func (*Array) PrintIn

func (array *Array) PrintIn()

打印数列

Example

打印输出

package main

import (
	"github.com/JeffreyBool/array"
)

func main() {
	array := array.NewArray()
	strs := []string{"A", "B", "C", "D", "E", "F"}
	for index, str := range strs {
		array.Add(index, str)
	}
	array.PrintIn()
}
Output:

Array: size = 6 , capacity = 10
[A, B, C, D, E, F]

func (*Array) Remove

func (array *Array) Remove(index int) (value interface{}, err error)

删除 index 位置的元素,并返回

Example

根据索引删除元素

package main

import (
	"github.com/JeffreyBool/array"
)

func main() {
	array := array.NewArray()
	strs := []string{"A", "B", "C", "D", "E", "F"}
	for index, str := range strs {
		array.Add(index, str)
	}

	array.PrintIn()
	array.Remove(2)
	array.PrintIn()
}
Output:

Array: size = 6 , capacity = 10
[A, B, C, D, E, F]
Array: size = 5 , capacity = 10
[A, B, D, E, F]

func (*Array) RemoveElement

func (array *Array) RemoveElement(value interface{}) (e interface{}, err error)

从数组中删除指定元素

Example

删除指定元素

package main

import (
	"github.com/JeffreyBool/array"
)

func main() {
	array := array.NewArray()
	strs := []string{"A", "B", "C", "D", "E", "F"}
	for index, str := range strs {
		array.Add(index, str)
	}

	array.PrintIn()
	array.RemoveElement("B")
	array.PrintIn()
}
Output:

Array: size = 6 , capacity = 10
[A, B, C, D, E, F]
Array: size = 5 , capacity = 10
[A, C, D, E, F]

func (*Array) RemoveFirst

func (array *Array) RemoveFirst() (interface{}, error)

删除数组首个元素

Example

删除头部元素

package main

import (
	"github.com/JeffreyBool/array"
)

func main() {
	array := array.NewArray()
	strs := []string{"A", "B", "C", "D", "E", "F"}
	for index, str := range strs {
		array.Add(index, str)
	}

	array.PrintIn()
	array.RemoveFirst()
	array.PrintIn()
}
Output:

array: size = 6 , capacity = 10
[A, B, C, D, E, F]
Array: size = 5 , capacity = 10
[B, C, D, E, F]

func (*Array) RemoveLast

func (array *Array) RemoveLast() (interface{}, error)

删除末尾元素

Example

删除末尾元素

package main

import (
	"github.com/JeffreyBool/array"
)

func main() {
	array := array.NewArray()
	strs := []string{"A", "B", "C", "D", "E", "F"}
	for index, str := range strs {
		array.Add(index, str)
	}

	array.PrintIn()
	array.RemoveLast()
	array.PrintIn()
}
Output:

Array: size = 6 , capacity = 10
[A, B, C, D, E, F]
Array: size = 5 , capacity = 10
[A, B, C, D, E]

func (*Array) Set

func (array *Array) Set(index int, value interface{}) (err error)

修改 index 位置的元素

Example

根据索引修改某个值

package main

import (
	"github.com/JeffreyBool/array"
)

func main() {
	array := array.NewArray()
	array.AddFirst("array add first")
	array.PrintIn()
	array.Set(0, "array set value")
	array.PrintIn()
}
Output:

Array: size = 1 , capacity = 10
[array add first]
Array: size = 1 , capacity = 10
[array set value]

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL