array

package
v0.0.0-...-5f74093 Latest Latest
Warning

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

Go to latest
Published: Jan 3, 2025 License: MIT Imports: 5 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	LETTERS = []string{
		"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
	}

	Letters = []string{
		"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
	}
)

Functions

func All

func All[S ~[]T, T any](fun func(x T) bool, arr S) bool

All 检查切片中所有元素是否都满足提供的条件函数。

参数:

  • fun: 一个函数,接受 T 类型的变长参数并返回布尔值,用于测试一组元素是否满足条件。
  • arr: T 类型的切片

返回值:

  • 如果所有元素均使得 `fun` 返回 true,则返回 true;只要有一个不满足则返回 false。 如果输入切片数组为空,则直接返回 false

func Any

func Any[S ~[]T, T any](fun func(x T) bool, arr S) bool

Any 检查切片中是否有任一元素满足提供的条件函数。

参数:

  • fun: 一个函数,接受 T 类型的变长参数并返回布尔值,用于测试一组元素是否满足条件。
  • arr: T 类型的切片

返回值:

  • 如果至少有一个元素使得 `fun` 返回 true,则返回 true;否则返回 false。 如果输入切片数组为空,则直接返回 false。

func ArrSequenceCount

func ArrSequenceCount[A ~[]T, T gotools.Comparable](arr1 A, arr2 A) int

SequenceCount 计算一个数组中特定序列出现的次数。

参数:

  • arr1[A]: 被搜索的数组,A 类型为切片,元素类型为 T。
  • arr2[A]: 需要计数的序列,类型与 arr1 相同。

返回值:

  • int: arr1 中 arr2 序列出现的次数。

注意:

  • A 和 T 使用类型参数,要求 T 类型的元素可比较。

func Cartesian

func Cartesian[S ~[]T, T any](arr ...S) [][]T

Cartesian函数生成多个切片的笛卡尔积。 参数:

  • arr: 一个切片,表示要进行笛卡尔积的切片。

返回:

  • [][]T: 一个二维切片,表示笛卡尔积后的切片。

函数返回类型为`[][]T`的切片,表示输入切片的笛卡尔积。 例如:Cartesian([][]int{{1, 2}, {3, 4}}...) = [][]int{{1, 3}, {1, 4}, {2, 3}, {2, 4}}

func Choose

func Choose[S ~[]T, T any](index []int, arr S) []T

Choose 根据提供的索引数组重新排列给定的泛型数组元素。 参数:

  • arr: 需要被重新排序的原数组,类型为泛型数组 S。
  • index: 一个整数索引数组,指示原数组元素在结果数组中的新位置。

返回值:

  • 返回一个与原数组相同类型的数组 S,其元素按照 index 指定的新顺序排列。

注意: 索引数组中的 - 1 值会被跳过,不会影响结果数组的构建。

func Chunk

func Chunk[S ~[]T, T any](size int, arr S) [][]T

Chunk 切片分片 参数:

  • size: 一个整数,表示每个切片的大小。
  • arr: 一个切片,表示要进行分片的切片。

返回:

  • [][]T: 一个二维切片,表示分片后的切片。

例如:ArrayChunk(2, [1, 2, 3, 4, 5, 6, 7, 8, 9])) // => [[1, 2], [3, 4], [5, 6], [7, 8], [9]]

func Compact

func Compact[S ~[]T, T gotools.Comparable](arr S) []T

Compact 移除给定切片 S 中连续重复的元素,其中 S 是泛型类型 T 的切片,且 T 必须实现了 gotools.Ordered 接口。

参数:

  • arr: 类型为 S 的切片,可能包含连续重复的元素。

返回值:

  • 一个新的切片,其中连续重复的元素已被移除。

此函数遍历输入切片,仅将与前一个元素不同的元素添加到结果切片中, 从而实现连续重复元素的紧凑化处理。如果输入切片为空,则返回同类型的空切片。

func CompactAny

func CompactAny[S ~[]T, T any](fun func(x, y T) bool, arr S) []T

CompactAny 移除给定切片 S 中连续重复的元素,其中 S 是泛型类型 T 的切片 ,且 T 为任意类型。

参数:

  • arr: 类型为 S 的切片,可能包含连续重复的元素。
  • fun: 用于比较两个元素是否相等的函数,类型为 func(x, y T) bool,其中 T 为任意类型。 相等则视为连续重复元素,不会追加到结果中

返回值:

  • 一个新的切片,其中连续重复的元素已被移除。

此函数遍历输入切片,仅将与前一个元素不同的元素添加到结果切片中, 从而实现连续重复元素的紧凑化处理。如果输入切片为空,则返回同类型的空切片。

func Concat

func Concat[S ~[]T, T any](a, b S) []T

func Copy

func Copy[T any](arr []T) []T

ArrayCopy 创建给定切片的一个副本。 它返回一个新的切片,其中包含与输入切片相同的元素。 参数:

  • arr - 要复制的切片。

返回:

  • 一个新的切片,它是输入切片的副本。

func CopyWithNum

func CopyWithNum[T any](arr []T, num int) []T

ArrayCopyWithNum 复制给定切片并创建一个新的切片,新切片的长度为 num。 如果 num 大于原切片长度,则重复原切片中的元素以填充新切片。 参数:

  • arr - 要复制的切片。
  • num - 新切片的长度。

返回:

  • 一个新的切片,其长度为 num,且元素为 arr 的重复。

func Count

func Count[S ~[]T, T any](arr S) int

func CountIf

func CountIf[S ~[]T, T any](fun func(x T) bool, arr S) int

CountIf 计算满足特定条件的元素数量 条件由提供的函数 `fun` 定义,该函数接受与输入切片数量相等的参数并返回一个布尔值。

参数:

  • fun: 一个 variadic 函数,接受与输入切片数量相同的 T 类型参数,并返回一个布尔值。 当给定的元素满足某种条件时,应返回 `true`。
  • arr: 参数为一个 S 类型的切片(元素类型为 T)

返回值:

  • 返回一个整数,表示在所有切片中满足 `fun` 条件的元素的数量。

注意:

  • 如果提供的切片为空,则函数返回 0。

func Difference

func Difference[S ~[]T, T gotools.Number](arr S) []T

Difference 计算类型为 S(元素类型为 T)的切片中相邻元素的差值,并返回一个新的切片。 要求 T 类型实现 gotools.Number 接口,支持减法运算。

参数:

  • arr: 输入的切片 S,元素为可以进行减法运算的数值类型,且长度至少为 1。

返回值:

  • 返回一个新的 S 类型切片,其中第 i 项是原切片中第 i 项与第 i - 1 项的差值。 第一项默认为原切片的第一项,之后的每一项都是后一项减去前一项的结果。

示例:

输入: []int{5, 2, 9, 1}
输出: []int{5,   - 3, 7,   - 8}

func Distinct

func Distinct[S ~[]T, T gotools.Comparable](arr S) []T

Distinct 去重数组元素 参数:

  • arr: 一个切片,表示要进行去重的切片。

返回:

  • []T: 一个新的切片,表示去重后的切片。

func DistinctCount

func DistinctCount[S ~[]T, T gotools.Comparable](arr S) int

DistinctCount 去重数组元素的数量 参数:

  • arr: 一个切片,表示要进行去重的切片。

返回:

  • int: 一个整数,表示去重后的切片的数量。

func EnumerateDense

func EnumerateDense[S ~[]T, T gotools.Comparable](arr S) []int

EnumerateDense 为输入的数组中每个元素生成一个索引列表,其中的值对应该元素在数组中首次出现的位置。 参数:

  • arr: 类型为 S 的数组,S 必须是类似切片的类型且其元素类型 T 可比较。

返回值:

  • 一个整数切片,长度与输入数组相同,其中的值表示对应元素在数组中首次出现的索引。

func Fill

func Fill[S ~[]T, T any](fun func(x T) bool, arr S) []T

Fill 根据提供的条件函数填充新切片。对于每个索引位置,如果条件函数应用于对应位置的元素返回 false, 则新切片中的该位置元素取自前一个索引位置的首个切片的元素;否则,取自当前索引位置的原始切片的元素。

参数:

  • fun: 一个函数,接受 T 类型的变长参数并返回布尔值,决定是否采用当前索引的值。
  • arr: T 类型的切片

返回值:

  • 一个新的切片 S,其中元素根据 `fun` 的判断结果从输入切片的相应位置或前一位置选取。 若输入为空,则返回空 T 类型切片。 第一个元素不判断

func Filter

func Filter[S ~[]T, T any](fun func(x T) bool, arr S) []T

Filter 根据提供的函数过滤多个同结构切片(类型为 T 的切片)的元素。 它将切片的对应元素作为参数传递给函数 `fun`,并仅保留 `fun` 返回真值时的切片中的元素。

参数:

  • fun: 一个函数,接受 T 类型的变长参数,返回布尔值,指示是否保留当前元素。
  • arr: 每个元素为 T 类型的切片

返回值:

  • 一个新的切片 S,包含根据 `fun` 筛选后的元素。若输入为空或首切片为空,则返回空切片 S。

func FilterIndex

func FilterIndex[S ~[]T, T any](fun func(x T) bool, arr S) []int

FilterIndex 根据提供的函数过滤切片(类型为 T 的切片)的元素索引。 它将切片的对应元素作为参数传递给函数 `fun`,并仅保留 `fun` 返回真值时的位置索引。

参数:

  • fun: 一个函数,接受 T 类型的变长参数,返回布尔值,指示是否保留当前元素。
  • arr: 每个元素为 T 类型的切片

返回值:

  • 一个新的切片 S,包含根据 `fun` 筛选后的元素的索引。若输入为空或首切片为空,则返回空切片 []int。

func FindFirst

func FindFirst[S ~[]T, T any](fun func(x T) bool, arr S) int

FindFirst 查找切片中第一个使条件函数 `fun` 返回 true 的元素所在的索引位置。

参数:

  • fun: 一个函数,接受 T 类型的变长参数并返回布尔值,用于测试一组元素是否满足条件。
  • arr: T 类型的切片

返回值:

  • 第一个满足条件的元素在原数组中的起始索引位置。 如果没有找到满足条件的组合,则返回 - 1。 如果输入切片数组为空,则直接返回 - 1。

func FindLast

func FindLast[S ~[]T, T any](fun func(x T) bool, arr S) int

FindLast 查找切片中最后一个使条件函数 `fun` 返回 true 的元素所在的索引位置。

参数:

  • fun: 一个函数,接受 T 类型的变长参数并返回布尔值,用于测试一组元素是否满足条件。
  • arr: T 类型的切片

返回值:

  • 最后一个满足条件的元素在原数组中的起始索引位置。 如果没有找到满足条件的组合,则返回 - 1。 如果输入切片数组为空,则直接返回 - 1。

func FindMax

func FindMax[S ~[]T, T gotools.Ordered](arr S) int

FindMax 查找类型为 S(元素类型为 T)的切片中最大元素的索引位置。

参数:

  • arr: 类型为 S 的切片,元素必须是可比较的(实现 gotools.Ordered 接口)。

返回值:

  • 返回切片中最大元素的索引。如果切片为空,则行为未定义(可能返回 0,具体取决于编译器和运行环境)。

注意: 此函数假定切片非空,并且切片中的元素能够相互比较以确定大小关系。

func FindMin

func FindMin[S ~[]T, T gotools.Ordered](arr S) int

FindMin 查找类型为 S(元素类型为 T)的切片中最小元素的索引位置。

参数:

  • arr: 类型为 S 的切片,元素必须是可比较的(实现 gotools.Ordered 接口)。

返回值:

  • 返回切片中最小元素的索引。如果切片为空,则行为未定义(可能返回 0,具体取决于编译器和运行环境)。

func First

func First[S ~[]T, T any](fun func(x T) bool, arr S) T

First 查找切片中第一个使条件函数 `fun` 返回 true 的元素,并返回该组合的第一个元素。

参数:

  • fun: 一个函数,接受 T 类型的变长参数并返回布尔值,用于测试一组元素是否满足条件。
  • arr: T 类型的切片

返回值:

  • 第一个满足条件的元素中的第一个元素。 如果没有找到满足条件的组合,则返回 T 类型的零值。 如果输入切片数组为空,则直接返回 T 类型的零值。

func FlatMap

func FlatMap[S ~[]T, T any, U any](fun func(x T) []U, arr S) []U

FlatMap 对切片(S,类型为 T 的切片)应用一个函数 : 并收集返回值形成一个新的 U 类型切片序列。

参数:

  • fun: 一个函数,接受 T 类型的变长参数,并返回 U 类型的结果。
  • arr: 元素为类型为 S 的切片

返回值:

  • 一个 U 类型的切片,其元素为对输入切片每相同索引位置的元素应用 `fun` 函数后的结果。 若输入为空,则返回空切片。

func From

func From[T any](input ...T) []T

From 函数接受任意类型的输入参数,并将它们转换为切片。

参数:

  • input: 可变长度参数,表示要转换为切片的输入值

返回:

  • 一个包含输入值的切片

func FromConvert

func FromConvert[T, U any](fun func(T) U, input ...T) []U

FromConvert 函数接受一个函数和任意数量的输入参数,根据函数的返回值决定是否将输入值添加到切片中。

参数:

  • fun: 一个函数,接受 T 类型的变长参数并返回 U 类型的结果,用于添加到切片中。
  • input: 可变长度参数,表示要转换为切片的输入值

返回:

  • 一个包含输入值的切片

func FromIf

func FromIf[T any](fun func(T any) bool, input ...T) []T

FromIf 函数接受一个函数和任意数量的输入参数,根据函数的返回值决定是否将输入值添加到切片中。

参数:

  • fun: 一个函数,接受 T 类型的变长参数并返回 bool,用于判断是否添加到切片中。
  • input: 可变长度参数,表示要转换为切片的输入值

返回:

  • 一个包含输入值的切片

func Has

func Has[S ~[]T, T gotools.Comparable](arr S, elem T) bool

Has 检查类型为 S(元素类型为 T)的切片中是否包含指定的元素。 要求 T 类型实现 gotools.Comparable 接口,以便进行相等性比较。

参数:

  • arr: 要检查的切片 S。
  • elem: 要搜索的元素 T。

返回值:

  • 如果切片 `arr` 包含元素 `elem`,则返回 `true`;否则返回 `false`。

func HasAll

func HasAll[S ~[]T, T gotools.Comparable](arr S, elems ...T) bool

HasAll 检查类型为 S(元素类型为 T)的切片是否包含指定的所有元素。 要求 T 类型实现 gotools.Comparable 接口,允许元素之间的相等性比较。

参数:

  • arr: 要检查的切片 S。
  • elems: 可变数量参数,表示要查找的所有元素 T 组成的集合。

返回值:

  • 如果切片 `arr` 包含 `elems` 中的所有元素,则返回 `true`;否则返回 `false`。

func HasAny

func HasAny[S ~[]T, T gotools.Comparable](arr S, elems ...T) bool

HasAny 检查类型为 S(元素类型为 T)的切片是否包含至少一个指定的元素。 要求 T 类型实现 gotools.Comparable 接口,允许元素之间的相等性比较。

参数:

  • arr: 要检查的切片 S。
  • elems: 可变数量参数,表示要查找的一个或多个元素 T。

返回值:

  • 如果切片 `arr` 中包含 `elems` 中的至少一个元素,则返回 `true`;否则返回 `false`。

func HasDupMaxCount

func HasDupMaxCount[S ~[]T, T gotools.Comparable](source, match S) int

HasDupMaxCount 计算源切片中与匹配切片元素相等的元素个数, 并在遇到第一个重复元素时停止计算。 这个函数使用泛型,S 表示切片的类型,而 T 表示切片元素的类型, 其中 T 必须是可比较的。

参数:

  • source: 待检查的源切片。
  • match: 用于匹配的参考切片。

返回值:

  • 返回源切片中与 match 中元素相等的元素个数。
  • 如果在计数过程中发现源切片中有重复元素,则提前终止并返回当前计数值。

func HasIncreaseMaxCount

func HasIncreaseMaxCount[S ~[]T, T gotools.Comparable](source, match S) int

HasIncreaseMaxCount 计算源切片中与匹配切片元素相等的连续元素个数。 此函数使用泛型,其中 S 表示切片的类型,T 表示切片元素的类型, 要求 T 必须是可比较的类型。

参数:

  • source: 待检查的源切片。
  • match: 用于匹配的参考切片。

返回值:

  • 返回源切片中与 match 中元素相等的连续元素个数。
  • 当 match 中的所有元素都已在 source 中找到匹配或 source 中不再有匹配元素时,停止计数并返回结果。

func HasOrderMaxCount

func HasOrderMaxCount[S ~[]T, T gotools.Comparable](source, match S, exist map[T]struct{}) int

HasOrderMaxCount 检查在给定的映射存在性验证下,切片 source 中有多少个元素可以按照切片 match 的顺序出现。 在source中出现了match中未出现的元素,停止计算返回 这个函数返回的是 source 中与 match 顺序一致的最长连续子序列的长度。

参数:

  • a: 类型为 S 的切片,S 是一个泛型切片,其元素类型为 T。
  • b: 类型同样为 S 的切片,作为参考顺序。
  • exist: 一个映射,键为 T 类型,用于快速判断元素是否存在于某个集合中。

返回值:

  • 返回一个整数,表示 source 中与 match 顺序一致的最长连续子序列的长度。

func HasSequence

func HasSequence[A ~[]T, T gotools.Comparable](arr1 A, arr2 A) (bool, int)

ArrayHasSequence 检查数组arr1中是否包含数组arr2作为连续子序列。

参数:

  • arr1 (A): 可能包含子序列的数组,类型A为切片的约束类型。
  • arr2 (A): 需要查找的连续子序列,类型与arr1相同。

返回值:

  • bool: 如果arr2是arr1中的一个连续子序列,则返回true,否则返回false。

此函数利用类型约束[A ~[]T, T gotools.Comparable]确保传入的参数为切片类型且元素可比较。 通过遍历arr1并逐一比对arr2的所有元素来判断子序列是否存在。

注意:

  • 如果arr1或arr2为空,函数返回false,0。

func InsertAt

func InsertAt[S ~[]T, T any](data S, pos ...int) func(default_x T) []T

InsertAt 在指定多个位置插入数据,当前位置的数据顺延到下一个位置 参数:

  • data: 一个切片,表示要插入的数据
  • pos: 一个切片,表示要插入的位置

返回:

  • func(default_x T) []T: 一个函数,用于插入默认值

例如:

InsertAt([]int{1, 2, 3, 4}, 1, 3, 5)(0) // => [1 0 2 0 3 0 4]
InsertAt([]int{1, 2, 3, 4}, 1, 3, 5,7)(0) // => [1 0 2 0 3 0 4]

func InterS

func InterS[S ~[]T, T gotools.Comparable](a, b S) []T

InterS 计算两个切片(类型为 []T,元素类型 T 可比较)的交集。

参数:

  • a: 一个切片。
  • b: 一个切片。

返回值:

  • 一个新的 []T 类型的切片,包含所有输入切片中共有的元素,且元素顺序与它们在第一个切片中出现的顺序一致。 如果没有交集或输入为空,则返回一个空切片。

func Intersect

func Intersect[S ~[]T, T any, U gotools.Comparable](f func(x T) U, a, b S) []T

Intersect 计算两个切片(类型为 []T,元素类型 T 任意类型)的交集。

参数:

  • f: 一个函数,用于将元素转换为可比较的类型。
  • a: 一个切片。
  • b: 一个切片。

返回值:

  • 一个新的 []T 类型的切片,包含所有输入切片中共有的元素,且元素顺序与它们在第一个切片中出现的顺序一致。 如果没有交集或输入为空,则返回一个空切片。

func Lag

func Lag[T any](arr []T, n int, def T) []T

Lag 生成一个新的切片,该切片由输入切片 `arr` 第n个元素前面的元素组成。缺少部分使用 `def` 填充。

参数:

  • arr: 类型为 `[]T` 的输入切片,包含类型为 `T` 的元素。
  • n: 指定 `arr` 中的第 `n` 个元素前面的元素组成新的切片。
  • def: 用于填充缺失的元素。

返回:

  • 一个类型为 `[]T` 的新切片,包含 `arr` 的前 `n` 个元素。

func Last

func Last[S ~[]T, T any](fun func(x T) bool, arr S) T

Last 查找切片中最后一个使条件函数 `fun` 返回 true 的元素,并返回该组合的第一个元素。

参数:

  • fun: 一个函数,接受 T 类型的变长参数并返回布尔值,用于测试一组元素是否满足条件。
  • arr: T 类型的切片

返回值:

  • 最后一个满足条件的元素中的第一个元素。 如果没有找到满足条件的组合,则返回 T 类型的零值。 如果输入切片数组为空,则直接返回 T 类型的零值。

func Lead

func Lead[T any](arr []T, n int, def T) []T

Lead 生成一个新的切片,该切片由输入切片 `arr` 第n个元素后面的元素组成。缺少部分使用 `def` 填充。

参数:

  • arr: 类型为 `[]T` 的输入切片,包含类型为 `T` 的元素。
  • n: 指定 `arr` 中的第 `n` 个元素后面的元素组成新的切片。
  • def: 用于填充缺失的元素。

返回:

  • 一个类型为 `[]T` 的新切片,包含输入切片 `arr` 中第 `n` 个元素后面的元素。

func Map

func Map[S ~[]T, T any, U any](fun func(x T) U, arr S) []U

Map 对切片(S,类型为 T 的切片)应用一个函数 , 并收集返回值形成一个新的 U 类型切片序列。

参数:

  • fun: 一个函数,接受 T 类型的变长参数,并返回 U 类型的结果。
  • arr: 每个元素为类型为 S 的切片

返回值:

  • 一个 U 类型的切片,其元素为对输入切片每相同索引位置的元素应用 `fun` 函数后的结果。 若输入为空 ,则返回空切片。

func Map2

func Map2[S ~[]T, T any, U ~[]V, V any, R any](f func(x T, y V) R, s S, v U) []R

Map2 用于将一个函数应用于两个切片的每个元素。 参数:

f - 一个函数,接受两个类型为 T 和 V 的参数,返回一个类型为 R 的值。
s - 一个包含 T 类型元素的切片。
v - 一个包含 V 类型元素的切片。

返回:

一个包含 R 类型元素的切片。

func Max

func Max[S ~[]T, T gotools.Ordered](arr S) T

Max 返回类型为 S(元素类型为 T)的切片中的最大元素。

参数:

  • arr: 类型为 S 的切片,元素需要可比较(实现 gotools.Ordered 接口)。

返回值:

  • 切片中的最大元素。 如果切片为空,则返回 T 类型的默认值(这可能是未定义的行为,具体取决于 T 的类型)。

func Mean

func Mean[S ~[]T, T gotools.Number](arr S) T

Mean 计算类型为 S(元素类型为 T)的切片中所有元素的平均值。

参数:

  • arr: 类型为 S 的切片,元素应为可以相加和除法运算的数字类型(实现 gotools.Number 接口)。

返回值:

  • 切片中所有元素的平均值。

func Merge

func Merge[S ~[]T, T any](f func(x T, y T) bool, arr ...S) []T

Merge 通过比较函数对多个切片进行合并,返回一个新的切片, 要求传入切片必须排序 参数:

  • f: 一个函数,接受两个类型为 T 的值,返回一个布尔值 当 `fun(x, y)` 返回 `true`,则在排序时 `x` 应位于 `y` 之前。
  • arr: 一个切片,表示要进行合并的切片。

返回:

  • []T: 一个新的切片,表示合并后的切片。

func Min

func Min[S ~[]T, T gotools.Ordered](arr S) T

Min 返回类型为 S(元素类型为 T)的切片中的最小元素。

参数:

  • arr: 类型为 S 的切片,元素需要可比较(实现 gotools.Ordered 接口)。

返回值:

  • 切片中的最小元素。 如果切片为空,则返回 T 类型的默认值(这可能是未定义的行为,具体取决于 T 的类型)。

func Order

func Order[D ~[]U, S ~[]T, T any, U gotools.Ordered](arr S, order D, descending bool) (S, D)

Order 对切片进行排序,order切片类型必须实现 Ordered 接口

参数:

  • arr: 一个切片,表示要进行排序的切片。
  • order: 一个切片,表示排序后的顺序。
  • descending: 一个布尔值,表示是否降序排序。

返回:

  • 一个新的切片,表示排序后的结果。
  • 一个新的切片,表示排序后的顺序。

func OrderFun

func OrderFun[D ~[]U, S ~[]T, T any, U any](f func(x, y U) bool, arr S, order D) (S, D)

OrderFun 通过比较函数对切片进行排序

参数:

  • f: 一个函数,接受两个 T 类型的变长参数并返回布尔值,决定是否交换两个元素的位置。true 表示交换,false 表示不交换。
  • arr: 一个切片,表示要进行排序的切片。
  • order: 一个切片,表示排序后的顺序。

返回:

  • 一个新的切片,表示排序后的结果。

func OrderFun2

func OrderFun2[D ~[]U, S ~[]T, T any, U any](f func(x, y U) bool, arr S, order D)

OrderFunLocal 通过比较函数对切片进行排序,修改原切片

参数:

  • f: 一个函数,接受两个 T 类型的变长参数并返回布尔值,决定是否交换两个元素的位置。true 表示交换,false 表示不交换。
  • arr: 一个切片,表示要进行排序的切片。
  • order: 一个切片,表示排序后的顺序。

无返回值

func OrderL

func OrderL[D ~[]U, S ~[]T, T any, U gotools.Ordered](arr S, order D)

OrderL 对切片进行升序排序,order切片类型必须实现 Ordered 接口

参数:

  • arr: 一个切片,表示要进行排序的切片。
  • order: 一个切片,表示排序后的顺序。

无返回值

func OrderR

func OrderR[D ~[]U, S ~[]T, T any, U gotools.Ordered](arr S, order D)

OrderR 对切片进行降序排序,order切片类型必须实现 Ordered 接口

参数:

  • arr: 一个切片,表示要进行排序的切片。
  • order: 一个切片,表示排序后的顺序。

无返回值

func Product

func Product[S ~[]T, T gotools.Number](arr S) float64

Product 计算类型为 S(元素为 gotools.Number 类型)的切片的所有元素的乘积,并返回结果为 float64 类型。

参数:

  • arr: 类型为 S 的切片,其元素需要实现 gotools.Number 接口(通常包括 int、float32、float64 等数字类型)。

返回值:

  • 所有切片元素相乘的结果,转换为 float64 类型返回。 如果切片为空,则返回 1.0,遵循数学中乘积的空集定义。

func RandomSample

func RandomSample[S ~[]T, T any](input S, samples int, replace bool) []T

RandomSample 从输入切片 S(类型为 T)中随机抽取指定数量的元素,返回一个新的切片 S。

参数:

  • input: 类型为 S 的切片,从中进行随机抽样。
  • samples: 需要抽取的样本数量,必须小于输入切片的长度。

返回值:

  • 一个新的切片 S,包含从输入切片中随机选取的 `samples` 个元素。 如果 `samples` 大于等于输入切片的长度,则直接返回原切片。

此函数使用当前时间作为随机数生成器的种子,确保每次调用都能得到不同的随机结果。

func Reduce

func Reduce[S ~[]T, T, U any](fun func(x U, y T) U, init U, arr S) U

Reduce 对切片中的元素从左到右应用一个累积函数,并返回该函数处理后的结果。 此函数泛型,适用于任何类型的切片和累积函数,只要累积函数的输入输出类型与切片元素类型兼容。

参数:

  • arr 需要被归约处理的切片。类型为 S,其中 S 是 T 类型元素的切片。

  • fun 累积函数,接收两个参数:累积结果(类型为 U)和切片中的当前元素(类型为 T),

  • init 初始累积值,类型为 U。

    并返回一个新的累积结果(同样为 U 类型)。此函数定义了如何将单个元素累积到整体结果中。

返回值:

  • 应用累积函数后得到的最终结果。类型为 U,累积过程的起始值为 U 的零值。

    如果切片为空,则直接返回 U 的零值。

注意事项:

  • 累积函数 `fun` 应确保对于所有可能的输入都是正确的,并且应当处理好任何潜在的边界条件或错误情况。
  • 若 `result` 是引用类型(如切片、map),其初始零值可能影响结果的预期。确保理解并适当处理此类情况。

func ReduceR

func ReduceR[S ~[]T, T, U any](fun func(x U, y T) U, init U, arr S) U

ReduceR 对切片中的元素从右到左应用一个累积函数,并返回该函数处理后的结果。 此函数泛型,适用于任何类型的切片和累积函数,只要累积函数的输入输出类型与切片元素类型兼容。

func Rep

func Rep[S ~[]T, T any](x S, n int, sort bool) []T

Rep 生成一个新的切片,该切片由输入切片 `x` 的元素重复 `n` 次组成。

参数:

  • x: 类型为 `S` 的输入切片,包含类型为 `T` 的元素。
  • n: 每个 `x` 中的元素应重复的次数。
  • sort: 一个布尔标志,指示生成的切片是否应进行排序。

返回:

  • 一个类型为 `[]T` 的新切片,包含重复的 `x` 元素。

func Repeat

func Repeat[T any](x T, n int) []T

Repeat 创建一个包含相同元素的切片。 它接受一个类型为 T 的元素和一个整数 n,返回一个长度为 n 的切片,其中所有元素都与 x 相同。 这个函数的目的是为了方便地初始化一个切片,当切片的所有元素都相同时,可以避免重复的初始化代码。 参数:

  • x: 类型为 T 的元素,切片中的每个元素都将复制这个值。
  • n: 切片的长度,指定切片将包含多少个元素。

返回值:

  • 一个类型为 []T 的切片,长度为 n,其中所有元素都等于 x。

func Repeated

func Repeated[S ~[]T, T any](x S, n int) []T

Repeated 创建一个包含相同重复切片的切片,该切片的长度等于n*len(x)。

参数:

  • x: 类型为 S 的切片,将复制到结果切片中。
  • n: 指定结果切片的长度,每个元素将复制 `x` `n` 次。

返回值:

  • 一个类型为 []T 的切片,长度为 n*len(x),其中每个元素都是 `x` 的副本。

func Reverse

func Reverse[S ~[]T, T any](arr S) []T

Reverse 反转给定的切片 S,其中 S 是泛型类型 T 的切片。

参数:

  • arr: 类型为 S 的切片,需要被反转。

返回值:

  • 反转后的切片 S,与输入切片类型相同。

当输入切片为空时,会直接返回同类型的空切片。

func ReverseFill

func ReverseFill[S ~[]T, T any](fun func(x T) bool, arr S) []T

ReverseFill 根据提供的条件函数反向填充新切片。它从最后一个元素开始向前遍历, 对于每个索引位置,使用条件函数 `fun` 应用于对应位置的元素,决定该位置的值。 如果 `fun` 返回 false,则新切片中的该位置元素取自后一个索引的值(即更靠近末尾的值); 如果 `fun` 返回 true,则取自当前索引的值。

参数:

  • fun: 一个函数,接受 T 类型的变长参数并返回布尔值,决定是否采用当前或下一个索引的值。
  • arr: T 类型的切片

返回值:

  • 一个新的切片 S,其中元素根据 `fun` 的判断结果从前一个或当前索引的值中选取。 若输入为空,则返回空 T 类型切片。 最后一个元素不判断

func ReverseSplit

func ReverseSplit[S ~[]T, T any](fun func(x T) bool, arr S) [][]T

ReverseSplit 根据提供的条件函数反向地将输入切片 S(类型为 T)分割成多个子切片,并返回这些子切片组成的切片。 与 `ArraySplit` 不同,此函数在条件满足的位置进行切割,并且包含切割点的元素在下一个子切片中。

参数:

  • fun: 一个函数,接受 T 类型的变长参数并返回布尔值,决定是否在当前位置进行切分。
  • arr: T 类型的切片

返回值:

  • 一个由 S 类型子切片组成的切片,每个子切片代表原切片中满足分割条件的相邻部分。 区别在于,当条件满足时,该元素会包含在后续的子切片中,而非当前子切片的结尾。 若输入为空或首切片为空,则返回空 S 类型切片的切片

注意:

  • 数组将在元素的右侧进行拆分。

func Rotate

func Rotate[S ~[]T, T any](arr S, n int) []T

Rotate 对输入的切片 S(类型为 T)进行循环旋转操作。

参数:

  • arr: 类型为 S 的切片,需要进行旋转操作。
  • n: 旋转步数,正数表示向右旋转,负数表示向左旋转。

返回值:

  • 新的 T 类型切片,为旋转操作后得到的结果。 如果输入切片为空,则直接返回原切片。

func Scan

func Scan[S ~[]T, T, U any](fun func(x U, y T) U, init U, arr S) []U

Scan 对切片中的元素从左到右应用一个扫描函数,并返回该函数处理后的结果。 此函数泛型,适用于任何类型的切片和扫描函数,只要扫描函数的输入输出类型与切片元素类型兼容。

参数:

  • arr 需要被扫描处理的切片。类型为 S,其中 S 是 T 类型元素的切片。

  • fun 扫描函数,接收两个参数:扫描结果(类型为 U)和切片中的当前元素(类型为 T),

  • init 初始扫描值,类型为 U。

    并返回一个新的扫描结果(同样为 U 类型)

返回值:

  • 应用扫描函数后得到的最终结果。类型为 U,扫描过程的起始值为 U 的零值。

    如果切片为空,则直接返回 U 的零值。

注意事项:

  • 扫描函数 `fun` 应确保对于所有可能的输入都是正确的,并且应当处理好任何潜在的边界条件或错误情况。
  • 若 `result` 是引用类型(如切片、map),其初始零值可能影响结果的预期。确保理解并适当处理此类情况。

func ScanR

func ScanR[S ~[]T, T, U any](fun func(x U, y T) U, init U, arr S) []U

ScanR 对切片中的元素从右到左应用一个扫描函数,并返回该函数处理后的结果。

func Seq

func Seq(start, end, step int) []int

Seq 创建一个整数数组,该数组基于起始值、结束值和步长。 它返回一个包含从start到end(但不包括end)的整数的切片,每个相邻元素之间的差值为step。 如果step为0,表示没有有效的步长,返回一个空切片。 如果step为正数且start大于end,或者step为负数且start小于end,也返回一个空切片,因为在这种情况下无法生成有效的序列。 参数:

  • start - 序列的起始整数值。
  • end - 序列的结束整数值,不包括在结果中。
  • step - 序列中相邻元素之间的步长。

返回值:

  • 一个整数切片,包含从start到end(但不包括end)的整数,每个相邻元素之间的差值为step

func Shif

func Shif[S ~[]T, T any](arr S, n int) []T

Shif 对输入的切片 S(类型为 T)进行循环移位操作。

参数:

  • arr: 类型为 S 的切片,将被移位。
  • n: 移位步数,正数表示向右移位,负数表示向左移位。

返回值:

  • 新的 T 类型切片,为移位操作后得到的结果。 如果输入切片为空,则直接返回原切片。

func Sort

func Sort[S ~[]T, T gotools.Ordered](arr S, descending bool) []T

Sort 对切片进行排序, 切片类型必须实现 Ordered 接口

参数:

  • arr: 一个切片,表示要进行排序的切片。
  • descending: 一个布尔值,表示是否降序排序。

返回:

  • 一个新的切片,表示排序后的结果。

func SortFun

func SortFun[S ~[]T, T any](f func(x T, y T) bool, arr S) []T

SortFun 通过比较函数对切片进行排序

参数:

  • f: 一个函数,接受两个 T 类型的变长参数并返回布尔值,决定是否交换两个元素的位置。true 表示交换,false 表示不交换。
  • arr: 一个切片,表示要进行排序的切片。

返回:

  • 一个新的切片,表示排序后的结果。

func SortFun2

func SortFun2[S ~[]T, T any](f func(x T, y T) bool, arr S)

SortFun2 通过比较函数对切片进行排序,修改原切片

参数:

  • f: 一个函数,接受两个 T 类型的变长参数并返回布尔值,决定是否交换两个元素的位置。true 表示交换,false 表示不交换。
  • arr: 一个切片,表示要进行排序的切片。

无返回值

func SortL

func SortL[S ~[]T, T gotools.Ordered](arr S)

SortL 对切片进行升序排序, 切片类型必须实现 Ordered 接口

参数:

  • arr: 一个切片,表示要进行排序的切片。

无返回值

func SortR

func SortR[S ~[]T, T gotools.Ordered](arr S)

SortR 对切片进行降序排序, 切片类型必须实现 Ordered 接口

参数:

  • arr: 一个切片,表示要进行排序的切片。

无返回值

func Split

func Split[S ~[]T, T any](fun func(x T) bool, arr S) [][]T

Split 根据提供的条件函数将输入切片 S(类型为 T)分割成多个子切片,并返回这些子切片组成的切片。 条件函数 `fun` 应用于输入切片的每个元素,当 `fun` 返回 true 时,会在该位置切割切片。

参数:

  • fun: 一个函数,接受 T 类型的变长参数并返回布尔值,决定是否在当前位置进行切分。
  • arr: T 类型的切片

返回值:

  • 一个由 S 类型子切片组成的切片,每个子切片代表原切片中满足分割条件相邻的部分。 若输入为空或首切片为空,则返回空 S 类型切片的切片。

注意:

  • 数组将在元素的左侧进行拆分。
  • 数组不会在第一个元素之前被分割。

func SubS

func SubS[S ~[]T, T gotools.Comparable](a, b S) []T

SubS 计算两个切片(类型为 []T,元素类型 T 可比较)的差集。

参数:

  • a: 一个切片。
  • b: 一个切片。

返回值:

  • 一个新的 []T 类型的切片,包含所有输入切片中不在第二个切片中出现的元素,且元素顺序与它们在第一个切片中出现的顺序一致。 如果没有差集或输入为空,则返回一个空切片。

func Subtract

func Subtract[S ~[]T, T any, U gotools.Comparable](f func(x T) U, a, b S) []T

Subtract 计算两个切片(类型为 []T,元素类型 T 任何类型)的差集。

参数:

  • f: 一个函数,用于将元素转换为可比较的类型。
  • a: 一个切片。
  • b: 一个切片。

返回值:

  • 一个新的 []T 类型的切片,包含所有输入切片中不在第二个切片中出现的元素,且元素顺序与它们在第一个切片中出现的顺序一致。 如果没有差集或输入为空,则返回一个空切片。

func Sum

func Sum[S ~[]T, T gotools.Number](arr S) T

Sum 计算类型为 S(元素类型为 T)的切片中所有元素的总和。

参数:

  • arr: 类型为 S 的切片,元素应为可以相加的数字类型(实现 gotools.Number 接口)。

返回值:

  • 切片中所有元素的和。 如果切片为空,则返回 T 类型的零值(对于数值类型通常是 0)。

func ToAny

func ToAny[S ~[]T, T any](arr S) []any

ToAny 将类型为 S(元素类型为 T)的切片转换为任意类型切片。 要求 T 类型实现 `any` 接口。

参数:

  • arr: 要转换的切片 S。

返回值:

  • 返回一个新的 []any 类型切片,包含输入的所有元素,保持原有的顺序。

func ToGeneric

func ToGeneric[T any](arr []any) []T

func ToMap

func ToMap[K gotools.Comparable](arr []K) map[K]struct{}

ToMap 将一个切片转换为一个映射(map),其中切片中的每个元素作为键(key), 值(value)是一个空结构体(struct{})。这个函数的目的是为了创建一个唯一的键集合, 由于结构体不占用存储空间,因此这种方式可以有效地表示一个集合。 参数:

  • arr []K: 一个包含待转换为映射键的元素的切片。

返回值:

  • map[K]struct{}: 一个映射,其中每个切片元素作为键,值是一个空结构体。

使用场景:

  • 当需要从切片中快速查找某个元素是否存在时,可以将切片转换为映射,利用映射的O(1)查找复杂度。
  • 该函数非常有用,因为它可以快速地创建一个唯一的键集合,从而节省内存空间。

func ToMap2

func ToMap2[K ~[]T, V ~[]S, T gotools.Comparable, S any](key K, value V) map[T]S

ToMap2 根据两个数组创建一个映射。 它接受两个参数:key和value,它们分别是K和V类型的数组。 函数返回一个map[T]S类型的映射,其中T和S是K和V数组元素的类型。 该函数的目的是通过索引匹配将key数组的元素作为映射的键,value数组的元素作为对应的值。 参数:

  • key K: 用于映射的键的数组。
  • value V: 与键对应的值的数组。

返回值:

  • map[T]S: 一个映射,其中键来自key数组,值来自value数组。

注意:

  • K和V的类型参数必须是数组类型,且K的元素类型必须是可比较的。
  • 这个函数假设key和value数组的长度是相同的,以便进行索引匹配。

func ToZero

func ToZero[S ~[]T, T gotools.Comparable](arr S) map[T]int

ToZero 将类型为 S(元素类型为 T)的切片转换为 map[T]int 类型。 要求 T 类型实现 `Comparable` 接口。

参数:

  • arr: 要转换的切片 S。

返回值:

  • 返回一个 map[T]int 类型的映射, 包含输入的所有元素,键为元素,值为 0。

func Toint

func Toint(arr []bool) []int

func Transform

func Transform[S ~[]F, D ~[]T, F gotools.Comparable, T any](x S, array_from S, array_to D, default_value T) []T

Transform 将切片 x 中的元素根据 array_from 和 array_to 的映射关系转换为新的类型 T, 并返回转换后的切片。如果 x 中的元素在映射中不存在,则使用 default_value 填充。 参数:

  • x - 待转换的切片。
  • array_from - 映射的键值切片。
  • array_to - 映射的值切片。
  • default_value - 当 x 中的元素在映射中不存在时使用的默认值。

返回:

一个新切片,其中元素为转换后的值。

func Union

func Union[S ~[]T, T any, U gotools.Comparable](f func(x T) U, a, b S) []T

Union 计算两个切片(类型为 []T,元素类型 T 任意类型)的并集。

参数:

  • f: 一个函数,用于将元素转换为可比较的类型。
  • a: 一个切片。
  • b: 一个切片。

返回值:

  • 一个新的 []T 类型的切片,包含所有输入切片中的元素,且元素顺序与它们在第一个切片中出现的顺序一致。 如果没有交集或输入为空,则返回一个空切片。

func UnionS

func UnionS[S ~[]T, T gotools.Comparable](a, b S) []T

UnionS 计算两个切片(类型为 []T,元素类型 T 可比较)的并集。

参数:

  • a: 一个切片。
  • b: 一个切片。

返回值:

  • 一个新的 []T 类型的切片,包含所有输入切片中的元素,且元素顺序与它们在第一个切片中出现的顺序一致。

func Unique

func Unique[S ~[]T, T gotools.Ordered](arr S) []T

Unique 移除类型为 S(元素类型为 T)的切片中的重复元素,并返回一个新的无重复元素的切片。 要求 T 类型实现 gotools.Ordered 接口,以便进行比较操作。

参数:

  • arr: 输入的切片 S,可能包含重复元素。 要求必须是排序后的切片

返回值:

  • 返回一个新的 S 类型切片,其中重复的元素已被移除,剩余元素按升序排列。

func UniqueCount

func UniqueCount[S ~[]T, T gotools.Ordered](arr S) int

UniqueCount 用于计算类型为 S(元素类型为 T)的切片中的唯一元素的个数。 要求 T 类型实现 gotools.Ordered 接口,以便进行比较操作。

参数:

  • arr: 输入的切片 S,可能包含重复元素。要求必须是排序后的切片

返回值:

  • 返回唯一元素的个数。

func Walk

func Walk[S ~[]T, T any](fun func(T), input S)

Walk 逐元素执行函数。

参数:

  • fun: 用于逐元素执行的函数。
  • input: 切片

返回:

func Which

func Which[T any](fun func(x ...T) bool, arr ...[]T) []int

Which 函数根据提供的判断函数fun,遍历多个切片数组arr的对应位置元素,判断这些元素是否满足fun定义的条件, 并记录满足条件的位置(以1表示)和不满足条件的位置(以0表示)到结果切片中返回。

参数:

  • fun: 一个通用型函数,接受任意数量的T类型参数并返回一个布尔值,用于判断一组元素是否满足特定条件。
  • arr: 可变数量的切片数组,每个切片包含相同数量的T类型元素,这些切片将被并行遍历以应用fun函数。

返回值:

  • 一个int类型的切片,表示在对应位置上元素是否满足fun条件的结果。满足条件的位置记为1,不满足则记为0。

注意:

  • 所有输入的切片arr必须具有相同的长度。

  • 使用了Go泛型[T any],允许该函数接受任何类型的参数和切片。

Types

type Cycle

type Cycle[T any] struct {
	// contains filtered or unexported fields
}

Cycle 用于实现循环队列。

func NewCycle

func NewCycle[T any](length int) *Cycle[T]

创建一个新的循环队列。

func (*Cycle[T]) Index

func (c *Cycle[T]) Index() int

Index 返回循环队列的当前索引。

func (*Cycle[T]) Len

func (c *Cycle[T]) Len() int

Len 返回循环队列的长度。

func (*Cycle[T]) Pop

func (c *Cycle[T]) Pop() T

Pop 从循环队列的index位置取出元素

func (*Cycle[T]) Push

func (c *Cycle[T]) Push(d T)

Push 将元素 d 添加到循环队列的index位置,并更新index

Jump to

Keyboard shortcuts

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