slice

package
v0.2.6 Latest Latest
Warning

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

Go to latest
Published: Oct 16, 2023 License: MIT Imports: 5 Imported by: 0

Documentation

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func Chunk added in v0.1.5

func Chunk[T any](collection []T, size int) [][]T

Chunk 返回分块后的切片

Example
package main

import (
	"fmt"
	"github.com/kercylan98/minotaur/utils/slice"
)

func main() {
	var collection = []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
	var chunks = slice.Chunk(collection, 3)
	for _, chunk := range chunks {
		fmt.Println(chunk)
	}
}
Output:

[1 2 3]
[4 5 6]
[7 8 9]

func Combinations added in v0.0.20

func Combinations[T any](a []T) [][]T

Combinations 获取给定数组的所有组合,包括重复元素的组合

func CombinationsPari added in v0.0.21

func CombinationsPari[T any](a, b []T, aCount, bCount int) [][]T

CombinationsPari 从给定的两个数组中按照特定数量得到所有组合后,再将两个数组的组合进行组合

  • 例如从数组 A 中得到所有数量为2的组合,从数组 B 中得到所有数量为3的组合,再将两个组合进行组合,得到所有数量为5的组合

func Contains added in v0.0.15

func Contains[V comparable](slice []V, value V) bool

Contains 判断数组是否包含某个元素

func ContainsAny added in v0.0.15

func ContainsAny[V any](slice []V, values V) bool

ContainsAny 判断数组是否包含某个元素

func Copy

func Copy[V any](slice []V) []V

Copy 复制特定切片

func CopyMatrix

func CopyMatrix[V any](slice [][]V) [][]V

CopyMatrix 复制二维数组

func Del

func Del[V any](slice *[]V, index int)

Del 删除特定索引的元素

func Distinct added in v0.0.15

func Distinct[V any](slice []V) []V

Distinct 去重

func Drop added in v0.1.5

func Drop[V any](start, n int, slice []V) []V

Drop 从切片中删除指定数量的元素

  • start: 起始位置
  • n: 删除的元素数量
  • slice: 待删除元素的切片

关于 start 的取值:

  • 当 start < 0 时,start 将会从右至左计数,即 -1 表示最后一个元素,-2 表示倒数第二个元素,以此类推
Example
package main

import (
	"fmt"
	"github.com/kercylan98/minotaur/utils/slice"
)

func main() {
	fmt.Println(slice.Drop(1, 3, []int{1, 2, 3, 4, 5}))
}
Output:

[1 5]

func DropBy added in v0.1.5

func DropBy[V any](slice []V, fn func(index int, value V) bool) []V

DropBy 从切片中删除指定的元素

  • slice: 待删除元素的切片

func Each added in v0.1.5

func Each[V any](abort bool, slice []V, iterator func(index int, item V) bool)

Each 根据传入的 abort 遍历 slice,如果 iterator 返回值与 abort 相同,则停止遍历

func EachF added in v0.1.5

func EachF[V any](slice []V, iterator func(index int, item V) bool)

EachF 与 Each 的功能相同,但是 abort 被默认为 false

func EachResult added in v0.1.5

func EachResult[V any, R any](abort bool, slice []V, iterator func(index int, item V) (R, bool)) []R

EachResult 根据传入的 abort 遍历 slice,得到遍历的结果,如果 iterator 返回值中的 bool 值与 abort 相同,则停止遍历,并返回当前已积累的结果

func EachResultF added in v0.1.5

func EachResultF[V any, R any](slice []V, iterator func(index int, item V) (R, bool)) []R

EachResultF 与 EachResult 的功能相同,但是 abort 被默认为 false

func EachResultReverse added in v0.1.5

func EachResultReverse[V any, R any](abort bool, slice []V, iterator func(index int, item V) (R, bool)) []R

EachResultReverse 根据传入的 abort 从后往前遍历 slice,得到遍历的结果,如果 iterator 返回值中的 bool 值与 abort 相同,则停止遍历,并返回当前已积累的结果

func EachResultReverseF added in v0.1.5

func EachResultReverseF[V any, R any](slice []V, iterator func(index int, item V) (R, bool)) []R

EachResultReverseF 与 EachResultReverse 的功能相同,但是 abort 被默认为 false

func EachResultReverseT added in v0.1.5

func EachResultReverseT[V any, R any](slice []V, iterator func(index int, item V) (R, bool)) []R

EachResultReverseT 与 EachResultReverse 的功能相同,但是 abort 被默认为 true

func EachResultT added in v0.1.5

func EachResultT[V any, R any](slice []V, iterator func(index int, item V) (R, bool)) []R

EachResultT 与 EachResult 的功能相同,但是 abort 被默认为 true

func EachReverse added in v0.1.5

func EachReverse[V any](abort bool, slice []V, iterator func(index int, item V) bool)

EachReverse 根据传入的 abort 从后往前遍历 slice,如果 iterator 返回值与 abort 相同,则停止遍历

func EachReverseF added in v0.1.5

func EachReverseF[V any](slice []V, iterator func(index int, item V) bool)

EachReverseF 与 EachReverse 的功能相同,但是 abort 被默认为 false

func EachReverseT added in v0.1.5

func EachReverseT[V any](slice []V, iterator func(index int, item V) bool)

EachReverseT 与 EachReverse 的功能相同,但是 abort 被默认为 true

func EachT added in v0.1.5

func EachT[V any](slice []V, iterator func(index int, item V) bool)

EachT 与 Each 的功能相同,但是 abort 被默认为 true

func FillBy added in v0.1.5

func FillBy[V any](slice []V, fn func(index int, value V) V) []V

FillBy 用指定的值填充切片

  • slice: 待填充的切片

func FillByCopy added in v0.1.5

func FillByCopy[V any](slice []V, fn func(index int, value V) V) []V

FillByCopy 与 FillBy 的功能相同,但是不会改变原切片,而是返回一个新的切片

func FillUntil added in v0.1.5

func FillUntil[V any](abort bool, slice []V, fn func(index int, value V) (V, bool)) []V

FillUntil 用指定的值填充切片,如果 fn 返回的 bool 值与 abort 相同,则停止填充

  • abort: 填充中止条件
  • slice: 待填充的切片

func FillUntilCopy added in v0.1.5

func FillUntilCopy[V any](abort bool, slice []V, fn func(index int, value V) (V, bool)) []V

FillUntilCopy 与 FillUntil 的功能相同,但不会改变原切片,而是返回一个新的切片

func FillUntilF added in v0.1.5

func FillUntilF[V any](slice []V, fn func(index int, value V) (V, bool)) []V

FillUntilF 是 FillUntil 的简化版本,其中 abort 参数为 false

func FillUntilFCopy added in v0.1.5

func FillUntilFCopy[V any](slice []V, fn func(index int, value V) (V, bool)) []V

FillUntilFCopy 是 FillUntilCopy 的简化版本,其中 abort 参数为 false

func FillUntilT added in v0.1.5

func FillUntilT[V any](slice []V, fn func(index int, value V) (V, bool)) []V

FillUntilT 是 FillUntil 的简化版本,其中 abort 参数为 true

func FillUntilTCopy added in v0.1.5

func FillUntilTCopy[V any](slice []V, fn func(index int, value V) (V, bool)) []V

FillUntilTCopy 是 FillUntilCopy 的简化版本,其中 abort 参数为 true

func Filter added in v0.0.31

func Filter[V any](reserve bool, slice []V, expression func(index int, item V) bool) []V

Filter 根据特定的表达式过滤切片成员

  • reserve: 是否保留符合条件的成员
  • slice: 待过滤的切片
  • expression: 过滤表达式

这个函数的作用是遍历输入切片 slice,然后根据 expression 函数的返回值来决定是否保留每个元素。具体来说

  • 如果 expression 返回 true 并且 reserve 也是 true,那么元素会被保留
  • 如果 expression 返回 false 并且 reserve 是 false,那么元素也会被保留

该没有创建新的内存空间或进行元素复制,所以整个操作相当高效。同时,由于 s 和 slice 实际上共享底层的数组,因此这个函数会改变传入的 slice。如果不希望改变原切片,需要在函数调用之前手动复制一份或者使用 FilterCopy 函数。

func FilterCopy added in v0.1.5

func FilterCopy[V any](reserve bool, slice []V, expression func(index int, item V) bool) []V

FilterCopy 与 Filter 的功能相同,但是不会改变原切片,而是返回一个新的切片

func FilterF added in v0.1.5

func FilterF[V any](slice []V, expression func(index int, item V) bool) []V

FilterF 与 Filter 的功能相同,但是 reserve 被默认为 false

func FilterFCopy added in v0.1.5

func FilterFCopy[V any](slice []V, expression func(index int, item V) bool) []V

FilterFCopy 与 FilterCopy 的功能相同,但是 reserve 被默认为 false

func FilterT added in v0.1.5

func FilterT[V any](slice []V, expression func(index int, item V) bool) []V

FilterT 与 Filter 的功能相同,但是 reserve 被默认为 true

func FilterTCopy added in v0.1.5

func FilterTCopy[V any](slice []V, expression func(index int, item V) bool) []V

FilterTCopy 与 FilterCopy 的功能相同,但是 reserve 被默认为 true

func GetEndPart added in v0.0.14

func GetEndPart[V any](slice []V, n int) []V

GetEndPart 获取数组的后 n 个元素

func GetIndex added in v0.0.20

func GetIndex[V comparable](slice []V, value V) int

GetIndex 判断数组是否包含某个元素,如果包含则返回索引

func GetIndexAny added in v0.0.20

func GetIndexAny[V any](slice []V, values V) int

GetIndexAny 判断数组是否包含某个元素,如果包含则返回索引

func GetPart added in v0.0.14

func GetPart[V any](slice []V, start, end int) []V

GetPart 获取指定区间的元素

func GetStartPart added in v0.0.14

func GetStartPart[V any](slice []V, n int) []V

GetStartPart 获取数组的前 n 个元素

func GetValue added in v0.0.30

func GetValue[V any](slice []V, i int) (v V)

GetValue 获取特定索引的元素,如果索引超出范围则返回零值

func GetValueHandle added in v0.0.30

func GetValueHandle[V any](slice []V, i int, handle func(v V))

GetValueHandle 获取特定索引的元素,并通过 handle 进入传入,如果索引超出范围则不会进入 handle

func GroupBy added in v0.1.5

func GroupBy[T any, K comparable](collection []T, fn func(T) K) map[K][]T

GroupBy 返回分组后的切片

func Insert

func Insert[V any](slice *[]V, index int, value V)

Insert 在特定索引插入元素

func IsIntersect added in v0.0.20

func IsIntersect[T any](a, b []T) bool

IsIntersect 判断两个切片是否有交集

func IsIntersectWithCheck added in v0.0.20

func IsIntersectWithCheck[T any](a, b []T, checkHandle func(a, b T) bool) bool

IsIntersectWithCheck 判断两个切片是否有交集

func LimitedCombinations added in v0.0.20

func LimitedCombinations[T any](a []T, minSize, maxSize int) [][]T

LimitedCombinations 获取给定数组的所有组合,且每个组合的成员数量限制在指定范围内

func Map added in v0.1.5

func Map[V any, T any](slice []V, converter func(index int, item V) T) []T

Map 将切片中的每一个元素转换为另一种类型的元素

  • slice: 待转换的切片
  • converter: 转换函数

这不会改变原有的切片,而是返回一个新的切片

func Merge added in v0.0.8

func Merge[V any](slices ...[]V) []V

Merge 合并多个数组

func Move

func Move[V any](slice *[]V, index, to int)

Move 移动特定索引

func NextLoop

func NextLoop[V any](slice []V, i int) (next int, value V)

NextLoop 返回 i 的下一个数组成员,当 i 达到数组长度时从 0 开始

  • 当 i 为 -1 时将返回第一个元素

func PrevLoop added in v0.0.5

func PrevLoop[V any](slice []V, i int) (prev int, value V)

PrevLoop 返回 i 的上一个数组成员,当 i 为 0 时从数组末尾开始

  • 当 i 为 -1 时将返回最后一个元素

func Reduce added in v0.1.5

func Reduce[V any, R generic.Number](start int, slice []V, reducer func(index int, item V, current R) R) (result R)

Reduce 将切片中的多个元素组合成一个单一值

  • start: 开始索引,如果为负数则从后往前计算,例如:-1 表示从最后一个元素开始向左遍历,1 表示从第二个元素开始
  • slice: 待组合的切片
  • reducer: 组合函数

func Reverse added in v0.0.5

func Reverse[V any](slice []V)

Reverse 反转数组

func Shuffle added in v0.0.5

func Shuffle[T any](collection []T) []T

Shuffle 随机打乱切片

  • 该函数会改变传入的切片,如果不希望改变原切片,需要在函数调用之前手动复制一份或者使用 ShuffleCopy 函数

func ShuffleCopy added in v0.1.5

func ShuffleCopy[T any](collection []T) []T

ShuffleCopy 返回随机打乱后的切片

  • 该函数不会改变原切片

func SubWithCheck added in v0.0.20

func SubWithCheck[T any](a, b []T, checkHandle func(a, b T) bool) []T

SubWithCheck 获取移除指定元素后的切片

  • checkHandle 返回 true 表示需要移除

func Swap added in v0.0.5

func Swap[V any](slice []V, i, j int)

Swap 交换数组中的两个元素

func ToMap added in v0.0.5

func ToMap[K comparable, V any](slice []V, key func(V) K) map[K]V

ToMap 将数组转换为 map

func ToSet added in v0.0.5

func ToSet[V comparable](slice []V) map[V]struct{}

ToSet 将数组转换为 set

func Unique added in v0.1.5

func Unique[T comparable](collection []T) []T

Unique 返回去重后的切片

func UniqueBy added in v0.1.5

func UniqueBy[T any](collection []T, fn func(T) any) []T

UniqueBy 返回去重后的切片

func Zoom added in v0.1.5

func Zoom[V any](newSize int, slice []V) []V

Zoom 将切片的长度缩放到指定的大小,如果 newSize 小于 slice 的长度,则会截断 slice,如果 newSize 大于 slice 的长度,则会在 slice 的末尾添加零值数据

Types

type Priority added in v0.0.30

type Priority[V any] struct {
	// contains filtered or unexported fields
}

Priority 是一个优先级切片

func NewPriority added in v0.0.30

func NewPriority[V any](lengthAndCap ...int) *Priority[V]

NewPriority 创建一个优先级切片

func (*Priority[V]) Action added in v0.0.30

func (slf *Priority[V]) Action(action func(items []*PriorityItem[V]) []*PriorityItem[V])

Action 直接操作切片,如果返回值不为 nil,则替换切片

func (*Priority[V]) Append added in v0.0.30

func (slf *Priority[V]) Append(v V, priority int)

Append 添加元素

func (*Priority[V]) Appends added in v0.0.30

func (slf *Priority[V]) Appends(priority int, vs ...V)

Appends 添加元素

func (*Priority[V]) Cap added in v0.0.30

func (slf *Priority[V]) Cap() int

Cap 返回切片容量

func (*Priority[V]) Clear added in v0.0.30

func (slf *Priority[V]) Clear()

Clear 清空切片

func (*Priority[V]) Get added in v0.0.30

func (slf *Priority[V]) Get(index int) *PriorityItem[V]

Get 获取元素

func (*Priority[V]) GetPriority added in v0.0.30

func (slf *Priority[V]) GetPriority(index int) int

GetPriority 获取元素优先级

func (*Priority[V]) GetValue added in v0.0.30

func (slf *Priority[V]) GetValue(index int) V

GetValue 获取元素值

func (*Priority[V]) Len added in v0.0.30

func (slf *Priority[V]) Len() int

Len 返回切片长度

func (*Priority[V]) Range added in v0.0.30

func (slf *Priority[V]) Range(action func(index int, item *PriorityItem[V]) bool)

Range 遍历切片,如果返回值为 false,则停止遍历

func (*Priority[V]) RangePriority added in v0.0.30

func (slf *Priority[V]) RangePriority(action func(index int, priority int) bool)

RangePriority 遍历切片优先级,如果返回值为 false,则停止遍历

func (*Priority[V]) RangeValue added in v0.0.30

func (slf *Priority[V]) RangeValue(action func(index int, value V) bool)

RangeValue 遍历切片值,如果返回值为 false,则停止遍历

func (*Priority[V]) Set added in v0.0.30

func (slf *Priority[V]) Set(index int, value V, priority int)

Set 设置元素

func (*Priority[V]) SetPriority added in v0.0.30

func (slf *Priority[V]) SetPriority(index int, priority int)

SetPriority 设置元素优先级

func (*Priority[V]) SetValue added in v0.0.30

func (slf *Priority[V]) SetValue(index int, value V)

SetValue 设置元素值

func (*Priority[V]) Slice added in v0.1.7

func (slf *Priority[V]) Slice() []V

Slice 返回切片

func (*Priority[V]) String added in v0.0.30

func (slf *Priority[V]) String() string

String 返回切片字符串

type PriorityItem added in v0.0.30

type PriorityItem[V any] struct {
	// contains filtered or unexported fields
}

PriorityItem 是一个优先级切片元素

func NewPriorityItem added in v0.0.30

func NewPriorityItem[V any](v V, priority int) *PriorityItem[V]

NewPriorityItem 创建一个优先级切片元素

func (*PriorityItem[V]) Next added in v0.0.30

func (p *PriorityItem[V]) Next() *PriorityItem[V]

Next 返回下一个元素

func (*PriorityItem[V]) Prev added in v0.0.30

func (p *PriorityItem[V]) Prev() *PriorityItem[V]

Prev 返回上一个元素

func (*PriorityItem[V]) Priority added in v0.0.30

func (p *PriorityItem[V]) Priority() int

Priority 返回元素优先级

func (*PriorityItem[V]) Value added in v0.0.30

func (p *PriorityItem[V]) Value() V

Value 返回元素值

type Slice added in v0.1.5

type Slice[V any] []V

Slice 切片类型

Jump to

Keyboard shortcuts

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