Время сортировки при запоминании данных - PullRequest
0 голосов
/ 06 июня 2018

У меня проблема с сортировкой различных массивов по времени в 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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...