golang array time.Time 查找第一个小于某个时间
时间: 2023-08-13 22:09:03 浏览: 112
Golang中time.After的使用理解与释放问题
可以使用二分查找算法来实现查找第一个小于某个时间的元素,具体实现如下:
```go
func binarySearch(times []time.Time, target time.Time) int {
left, right := 0, len(times)-1
for left <= right {
mid := (left + right) / 2
if times[mid].Before(target) {
if mid == len(times)-1 || times[mid+1].After(target) {
return mid
}
left = mid + 1
} else {
right = mid - 1
}
}
return -1
}
```
这个函数接受一个 `[]time.Time` 类型的切片和一个目标时间 `target`,返回第一个小于 `target` 的元素的下标。如果没有找到,则返回 -1。
使用示例:
```go
times := []time.Time{
time.Date(2021, 5, 1, 0, 0, 0, 0, time.UTC),
time.Date(2021, 5, 2, 0, 0, 0, 0, time.UTC),
time.Date(2021, 5, 3, 0, 0, 0, 0, time.UTC),
time.Date(2021, 5, 4, 0, 0, 0, 0, time.UTC),
time.Date(2021, 5, 5, 0, 0, 0, 0, time.UTC),
}
target := time.Date(2021, 5, 3, 0, 0, 0, 0, time.UTC)
index := binarySearch(times, target)
if index != -1 {
fmt.Println(times[index])
} else {
fmt.Println("not found")
}
```
输出结果为:
```
2021-05-02 00:00:00 +0000 UTC
```
阅读全文