通用的golang自定義結構陣列排序

2021-10-01 16:47:49 字數 1153 閱讀 9392

資料查詢採用了併發的方式,然後用chan收集資料,得到的陣列是乙個亂序的陣列,想根據陣列元素的某個字段進行排序。一般是用sort包進行排序,但是不同陣列的元素型別不同,不想為每乙個元素進行實現sort中的介面,故在外層加了一成封裝。

假設結構體比較的字段是int型,基本滿足了絕大多數場景的排序。其他比較類似。通過反射實現大小的比較。swap方法的實現本來也想用reflect自己實現,始終報錯。最後發現reflect提供了相應的方法,真是日了狗了。

package main

import

("fmt"

"reflect"

"sort"

)type items struct

field string

}func

(items *items)

len(

) int

return reflect.

valueof

(items.data)

.len()

}func

(items *items)

less

(i, j int) bool

if b.

kind()

== reflect.ptr

va :

= a.

fieldbyname

(items.field)

.int()

vb :

= b.

fieldbyname

(items.field)

.int()

return va < vb

}func

(items *items)

swap

(i, j int)

func sortitems

(i inte***ce

, str string)

a :=&items

sort.

sort

(a)}

type person struct

func main()

,,,,

,}sortitems

(ps,

"age"

)for _, v :

= range ps

}

golang 自定義型別

1.8 自定義型別 可將型別分為命名和未命名兩 大類。命名型別包括 bool int string 等,而 array slice map 等和具體元素型別 長度等有關,屬於未命名型別。具有相同宣告的未命名型別被視為同 一型別。具有相同基型別的指標。具有相同元素型別和 長度的 array。具有相同元...

JAVA自定義通用快取

1,快取基類 public abstract class basecache protected void remove string key protected hashmapgetmap string key protected boolean containskey string key pr...

Golang對自定義型別排序

在實際專案中用到對結構按結構體中的某個字段進行排序,在網上查到乙個比較好的辦法,mark一下。首先golang的sort包提供了基本的排序,包括插入排序 insertionsort 歸併排序 symmerge 堆排序 heapsort 和快速排序 quicksort 其實現如下 func sort ...