У меня проблема с сортировкой различных массивов по времени в Go.Я прочитал учебник о том, как сортировать его по временным интервалам, но в примерах, которые я нашел, он учитывает только само время, то есть любые другие данные, которые я отправил с ним, не смогут быть отсортированы.
Я - мой пример. У меня есть структура с датой (time.Time) и идентификатором (int), и я хочу иметь возможность сортировать все структуры, связанные с их датами, в общем списке, оставаясь при этомвозможность доступа к их идентификатору.
У меня есть три класса.Учетная запись: добавляет временные структуры, которые отслеживают дату и идентификатор экземпляра и добавляет его в глобальный список.Контроллер: владеет глобальным списком, а также заботится о вызове функции сортировки.TimeSlice: класс временных интервалов по умолчанию с len, less и swap.
Итак, чтобы уточнить, как мне отсортировать время таким образом, чтобы я по-прежнему мог получить доступ к другой информации, такой как идентификатор учетной записи?
//Account.go
func (i *InstanceController) InitAccount() *Account {
account := new(Account)
i.IncrementIDs(account) //Sets account id
t := TimeStruct{date: account.Created, id: account.ID}
i.AccountStamps[account.ID] = t
}
//Controller.go
type InstanceController struct {
AccountList map[int]*Account
ID int
AccountStamps map[int]TimeStruct
}
func InitInstanceController() *InstanceController {
ic := new(InstanceController)
ic.ID = 0
ic.AccountList = make(map[int]*Account)
ic.AccountStamps = make(map[int]*TimeStruct)
return ic
}
//TimeSlice.go
package account
import "fmt"
import "time"
import "sort"
type timeSlice []time.Time
func (s timeSlice) Less(i, j int) bool { return s[i].Before(s[j]) }
func (s timeSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
func (s timeSlice) Len() int { return len(s) }
var past = time.Date(2010, time.May, 18, 23, 0, 0, 0, time.Now().Location())
var present = time.Now()
var future = time.Now().Add(24 * time.Hour)
var dateSlice timeSlice = []time.Time{present, future, past}
func funcers() {
fmt.Println("Past : ", past)
fmt.Println("Present : ", present)
fmt.Println("Future : ", future)
fmt.Println("Before sorting : ", dateSlice)
sort.Sort(dateSlice)
fmt.Println("After sorting : ", dateSlice)
sort.Sort(sort.Reverse(dateSlice))
fmt.Println("After REVERSE sorting : ", dateSlice)
}
func SortTimeSlice(t timeSlice) {
fmt.Println("Before sorting : ", t)
sort.Sort(t)
fmt.Println("After sorting : ", t)
}
type TimeStruct struct {
date time.Time
id int
}
func (ic *InstanceController) AddTimeStruct(t TimeStruct) {
ic.AccountStamps[t.id] = t
}
func (ic *InstanceController) AppendToListForSort(ts []TimeStruct) {
newList := []time.Time{}
for k, v := range ts {
newList = append(v.date)
}
sort.Sort(newList)
}