mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-03-19 21:28:28 +02:00
51 lines
1.3 KiB
Go
51 lines
1.3 KiB
Go
package lo
|
|
|
|
import "golang.org/x/exp/constraints"
|
|
|
|
// Range creates an array of numbers (positive and/or negative) with given length.
|
|
func Range(elementNum int) []int {
|
|
length := If(elementNum < 0, -elementNum).Else(elementNum)
|
|
result := make([]int, length)
|
|
step := If(elementNum < 0, -1).Else(1)
|
|
for i, j := 0, 0; i < length; i, j = i+1, j+step {
|
|
result[i] = j
|
|
}
|
|
return result
|
|
}
|
|
|
|
// RangeFrom creates an array of numbers from start with specified length.
|
|
func RangeFrom[T constraints.Integer | constraints.Float](start T, elementNum int) []T {
|
|
length := If(elementNum < 0, -elementNum).Else(elementNum)
|
|
result := make([]T, length)
|
|
step := If(elementNum < 0, -1).Else(1)
|
|
for i, j := 0, start; i < length; i, j = i+1, j+T(step) {
|
|
result[i] = j
|
|
}
|
|
return result
|
|
}
|
|
|
|
// RangeWithSteps creates an array of numbers (positive and/or negative) progressing from start up to, but not including end.
|
|
// step set to zero will return empty array.
|
|
func RangeWithSteps[T constraints.Integer | constraints.Float](start, end, step T) []T {
|
|
result := []T{}
|
|
if start == end || step == 0 {
|
|
return result
|
|
}
|
|
if start < end {
|
|
if step < 0 {
|
|
return result
|
|
}
|
|
for i := start; i < end; i += step {
|
|
result = append(result, i)
|
|
}
|
|
return result
|
|
}
|
|
if step > 0 {
|
|
return result
|
|
}
|
|
for i := start; i > end; i += step {
|
|
result = append(result, i)
|
|
}
|
|
return result
|
|
}
|