在go 1.2中按时间日期字段对结构切片进行排序,而无需创建二级结构[重复]



此问题已经存在 在这里有一个答案:</ p>





  • 按时间排序。在Golang中的时间



    3个答案
    </ span>

    </ li>

    </ ul>

    </ div>

    此处的答案按时间排序。在Golang中的时间 </ p>

    尝试对带有地图的辅助数组进行排序</ p>

     类型timeSlice [] reviews_data 
    </ code> </ pre>

    是否可以对不带日期的对象的golang切片进行排序,而无需创建此辅助数据结构? </ p>

    给出一个类似</ p>

      type SortDateExample struct的结构{
    sortByThis time.Time
    id string
    }
    </ 代码> </ pre>

    ,并且切片初始化了</ p>

      var datearray = var alerts = make([[SortDateExample,0)
    dateSlice = append(dateSlice,newSortDateExmple)
    dateSlice = append(dateSlice,newSortDateExmple2)
    dateSlice = append(dateSlice,newSortDateExmple3)
    </ code> </ pre>

    如何按时间字段对数组排序 sortByThis?</ p>
    </ div>

展开原文

原文

This question already has an answer here:

This answer here Sorting by time.Time in Golang

tries to sort with a secondary array with a map

type timeSlice []reviews_data

Can golang slices of objects with dates be sorted by without creating this secondary data structure?

Given a struct like

type SortDateExample struct {
    sortByThis time.Time
    id string
}    

And a slice initialized something like

var datearray = var alerts = make([]SortDateExample, 0)
dateSlice = append(dateSlice,newSortDateExmple)
dateSlice = append(dateSlice,newSortDateExmple2)
dateSlice = append(dateSlice,newSortDateExmple3)

How can I sort array by the time field sortByThis?

</div>

1个回答



使用Go 1.8及更高版本</ strong> </ p>

  sort。  Slice(dateSlice,func(i,j int)bool {
返回dateSlice [i] .sortByThis.Before(dateSlice [j] .sortByThis)
})
</ code> </ pre>

https://golang.org/pkg/sort/#Slice </ p>

Go低于1.8 </ strong> </ p>

在这种情况下,您不需要 map </ code>, 但是您确实需要为数组定义类型:</ p>

  type SortedDateExampleArray [] SortDateExample 
</ code> </ pre>

然后 需要该数组类型来实现 sort.Interface </ code>中的方法。</ p>

  func(一个SortedDateExampleArray)Len()int {
return len(a )
}

func(A SortedDateExampleArray)少(i,j int)bool {
返回a [i] .sortByThis.Before(a [j] .sortByThis)
}

func(A SortedDateExampleArray )交换(i,j int){
a [i],a [j] = a [j],a [i]
}
</ code> </ pre>

那么您可以使用< code> sort.Sort </ code>对自定义数组进行排序。</ p>

https://golang.org/pkg/sort/#Sort </ p>
</ div>

展开原文

原文

With Go 1.8 and above

sort.Slice(dateSlice, func(i, j int) bool { 
    return dateSlice[i].sortByThis.Before(dateSlice[j].sortByThis) 
})

https://golang.org/pkg/sort/#Slice

With Go below 1.8

In that case, you don't need a map, but you do need to define a type for your array:

type SortedDateExampleArray []SortDateExample

Then you need that array type to implement the methods in sort.Interface.

func (a SortedDateExampleArray) Len() int {
    return len(a)
}

func (a SortedDateExampleArray) Less(i, j int) bool {
    return a[i].sortByThis.Before(a[j].sortByThis)
}

func (a SortedDateExampleArray) Swap(i, j int) {
    a[i], a[j] = a[j], a[i]
}

And then you can use sort.Sort to sort your custom array.

https://golang.org/pkg/sort/#Sort

dton37910
dton37910 仅当您要重用Go的库排序功能时,另一个选择是自己对数组实施排序功能。
12 个月之前 回复
dongshi1207
dongshi1207 gh,我真的必须定义一个类型吗? 我已经使用了一个结构数组
12 个月之前 回复
drrog9853
drrog9853 我看到您编辑了问题以指出它是Go 1.2,所以我在回答中包括了“ With Go低于1.8”部分。
12 个月之前 回复
douren4075
douren4075 是:golang.org/doc/go1.8#sort_slice
12 个月之前 回复
duanchen7036
duanchen7036 这需要1.8吗?
12 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问