Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
fe278f7772
|
|||
8ebda6fb3a
|
|||
b0d3ce8c1c
|
|||
021465e524
|
|||
cf9c73aa4a
|
@@ -433,3 +433,10 @@ func ArrConcat[T any](arr ...[]T) []T {
|
|||||||
}
|
}
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ArrCopy does a shallow copy of the 'in' array
|
||||||
|
func ArrCopy[T any](in []T) []T {
|
||||||
|
out := make([]T, len(in))
|
||||||
|
copy(out, in)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
@@ -31,16 +31,16 @@ func CompareIntArr(arr1 []int, arr2 []int) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func CompareArr[T OrderedConstraint](arr1 []T, arr2 []T) bool {
|
func CompareArr[T OrderedConstraint](arr1 []T, arr2 []T) int {
|
||||||
|
|
||||||
for i := 0; i < len(arr1) || i < len(arr2); i++ {
|
for i := 0; i < len(arr1) || i < len(arr2); i++ {
|
||||||
|
|
||||||
if i < len(arr1) && i < len(arr2) {
|
if i < len(arr1) && i < len(arr2) {
|
||||||
|
|
||||||
if arr1[i] < arr2[i] {
|
if arr1[i] < arr2[i] {
|
||||||
return true
|
return -1
|
||||||
} else if arr1[i] > arr2[i] {
|
} else if arr1[i] > arr2[i] {
|
||||||
return false
|
return +2
|
||||||
} else {
|
} else {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@@ -49,17 +49,17 @@ func CompareArr[T OrderedConstraint](arr1 []T, arr2 []T) bool {
|
|||||||
|
|
||||||
if i < len(arr1) {
|
if i < len(arr1) {
|
||||||
|
|
||||||
return true
|
return +1
|
||||||
|
|
||||||
} else { // if i < len(arr2)
|
} else { // if i < len(arr2)
|
||||||
|
|
||||||
return false
|
return -1
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func CompareString(a, b string) int {
|
func CompareString(a, b string) int {
|
||||||
|
@@ -1,5 +1,10 @@
|
|||||||
package langext
|
package langext
|
||||||
|
|
||||||
|
type MapEntry[T comparable, V any] struct {
|
||||||
|
Key T
|
||||||
|
Value V
|
||||||
|
}
|
||||||
|
|
||||||
func MapKeyArr[T comparable, V any](v map[T]V) []T {
|
func MapKeyArr[T comparable, V any](v map[T]V) []T {
|
||||||
result := make([]T, 0, len(v))
|
result := make([]T, 0, len(v))
|
||||||
for k := range v {
|
for k := range v {
|
||||||
@@ -8,6 +13,14 @@ func MapKeyArr[T comparable, V any](v map[T]V) []T {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MapValueArr[T comparable, V any](v map[T]V) []V {
|
||||||
|
result := make([]V, 0, len(v))
|
||||||
|
for _, mv := range v {
|
||||||
|
result = append(result, mv)
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
func ArrToMap[T comparable, V any](a []V, keyfunc func(V) T) map[T]V {
|
func ArrToMap[T comparable, V any](a []V, keyfunc func(V) T) map[T]V {
|
||||||
result := make(map[T]V, len(a))
|
result := make(map[T]V, len(a))
|
||||||
for _, v := range a {
|
for _, v := range a {
|
||||||
@@ -16,6 +29,17 @@ func ArrToMap[T comparable, V any](a []V, keyfunc func(V) T) map[T]V {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MapToArr[T comparable, V any](v map[T]V) []MapEntry[T, V] {
|
||||||
|
result := make([]MapEntry[T, V], 0, len(v))
|
||||||
|
for mk, mv := range v {
|
||||||
|
result = append(result, MapEntry[T, V]{
|
||||||
|
Key: mk,
|
||||||
|
Value: mv,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
func CopyMap[K comparable, V any](a map[K]V) map[K]V {
|
func CopyMap[K comparable, V any](a map[K]V) map[K]V {
|
||||||
result := make(map[K]V, len(a))
|
result := make(map[K]V, len(a))
|
||||||
for k, v := range a {
|
for k, v := range a {
|
||||||
@@ -23,3 +47,11 @@ func CopyMap[K comparable, V any](a map[K]V) map[K]V {
|
|||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ForceMap[K comparable, V any](v map[K]V) map[K]V {
|
||||||
|
if v == nil {
|
||||||
|
return make(map[K]V, 0)
|
||||||
|
} else {
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -41,6 +41,14 @@ func NewHexUUID() (string, error) {
|
|||||||
return string(dst), nil
|
return string(dst), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MustHexUUID() string {
|
||||||
|
v, err := NewHexUUID()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
|
||||||
func NewUpperHexUUID() (string, error) {
|
func NewUpperHexUUID() (string, error) {
|
||||||
uuid, err := NewUUID()
|
uuid, err := NewUUID()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -64,6 +72,14 @@ func NewUpperHexUUID() (string, error) {
|
|||||||
return strings.ToUpper(string(dst)), nil
|
return strings.ToUpper(string(dst)), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MustUpperHexUUID() string {
|
||||||
|
v, err := NewUpperHexUUID()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
|
||||||
func NewRawHexUUID() (string, error) {
|
func NewRawHexUUID() (string, error) {
|
||||||
uuid, err := NewUUID()
|
uuid, err := NewUUID()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -83,6 +99,14 @@ func NewRawHexUUID() (string, error) {
|
|||||||
return strings.ToUpper(string(dst)), nil
|
return strings.ToUpper(string(dst)), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MustRawHexUUID() string {
|
||||||
|
v, err := NewRawHexUUID()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
|
||||||
func NewBracesUUID() (string, error) {
|
func NewBracesUUID() (string, error) {
|
||||||
uuid, err := NewUUID()
|
uuid, err := NewUUID()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -108,6 +132,14 @@ func NewBracesUUID() (string, error) {
|
|||||||
return strings.ToUpper(string(dst)), nil
|
return strings.ToUpper(string(dst)), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MustBracesUUID() string {
|
||||||
|
v, err := NewBracesUUID()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
|
||||||
func NewParensUUID() (string, error) {
|
func NewParensUUID() (string, error) {
|
||||||
uuid, err := NewUUID()
|
uuid, err := NewUUID()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -132,3 +164,11 @@ func NewParensUUID() (string, error) {
|
|||||||
|
|
||||||
return strings.ToUpper(string(dst)), nil
|
return strings.ToUpper(string(dst)), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MustParensUUID() string {
|
||||||
|
v, err := NewParensUUID()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user