58 lines
1.4 KiB
Go
58 lines
1.4 KiB
Go
package langext
|
|
|
|
import "sort"
|
|
|
|
func Sort[T OrderedConstraint](arr []T) {
|
|
sort.Slice(arr, func(i1, i2 int) bool {
|
|
return arr[i1] < arr[i2]
|
|
})
|
|
}
|
|
|
|
func SortStable[T OrderedConstraint](arr []T) {
|
|
sort.SliceStable(arr, func(i1, i2 int) bool {
|
|
return arr[i1] < arr[i2]
|
|
})
|
|
}
|
|
|
|
func IsSorted[T OrderedConstraint](arr []T) bool {
|
|
return sort.SliceIsSorted(arr, func(i1, i2 int) bool {
|
|
return arr[i1] < arr[i2]
|
|
})
|
|
}
|
|
|
|
func SortSlice[T any](arr []T, less func(v1, v2 T) bool) {
|
|
sort.Slice(arr, func(i1, i2 int) bool {
|
|
return less(arr[i1], arr[i2])
|
|
})
|
|
}
|
|
|
|
func SortSliceStable[T any](arr []T, less func(v1, v2 T) bool) {
|
|
sort.SliceStable(arr, func(i1, i2 int) bool {
|
|
return less(arr[i1], arr[i2])
|
|
})
|
|
}
|
|
|
|
func IsSliceSorted[T any](arr []T, less func(v1, v2 T) bool) bool {
|
|
return sort.SliceIsSorted(arr, func(i1, i2 int) bool {
|
|
return less(arr[i1], arr[i2])
|
|
})
|
|
}
|
|
|
|
func SortBy[TElem any, TSel OrderedConstraint](arr []TElem, selector func(v TElem) TSel) {
|
|
sort.Slice(arr, func(i1, i2 int) bool {
|
|
return selector(arr[i1]) < selector(arr[i2])
|
|
})
|
|
}
|
|
|
|
func SortByStable[TElem any, TSel OrderedConstraint](arr []TElem, selector func(v TElem) TSel) {
|
|
sort.SliceStable(arr, func(i1, i2 int) bool {
|
|
return selector(arr[i1]) < selector(arr[i2])
|
|
})
|
|
}
|
|
|
|
func IsSortedBy[TElem any, TSel OrderedConstraint](arr []TElem, selector func(v TElem) TSel) {
|
|
sort.SliceStable(arr, func(i1, i2 int) bool {
|
|
return selector(arr[i1]) < selector(arr[i2])
|
|
})
|
|
}
|